Q&A

  • 다음 포트제어에 대해 검토부탁합니다.
다음은 Printer (Line Printer)의 상태를 알려주는 Assembler입니다.

Windows98에서는 아무 문제없이 돌아갔는데

Windows NT에서 아래의 'int 17h'라인에서 자꾸 에러가 나서 프로그램이 에러가 뜹니다.

아래의 프로그램은 우연히 인터넷상에서 구했는데 어셈블러라서 잘 모르겠습니다.

급히 부탁드립니다.





function PrinterStatus(const Aport: word): byte; assembler;

var

tt : byte;

{ AH 레지스터의 상태값 (8bit):

0 - time out

1 - unused

2 - unused

3 - i/o error

4 - on line selected

5 - out of paper

6 - acknowledge

7 - not busy

}

begin

asm

mov ah, 02h

mov dx, Aport

int 17h

mov tt, ah

end;

PrinterStatus:= tt;

end;



function PrinterReady(APort : word): Boolean;

{APort : 0=LPT1,1=LPT2,etc}

const

pTimeOut = $01;

pIOError = $08;

pNoPaper = $20;

pNotBusy = $80;

pTestAll = pTimeOut + pIOError + pNoPaper;

begin

PrinterReady:= (PrinterStatus(APort) and pTestALL) = $00;

end;



procedure TMainForm.chkTimeTimer(Sender: TObject);

begin

if (PrinterReady(0) = True) then

begin

Panel4.Color := clRed;

_Connected_LPT := PRINTER_CONNECTED;

end

else

begin

Panel4.Color := clBtnFace;

_Connected_LPT := PRINTER_DISCONNECTED;

end;

end;

0  COMMENTS