다음은 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;