[Back to PRINTING SWAG index] [Back to Main SWAG index] [Original]
{
I am looking For something like in BASIC where you could ON ERRO GOSUB
and anytime there was an error the Program re-routed..
It Sounds like you're after two things; a method of checking your Printer
and a means of trapping runtime errors.
}
Function PrinterReport:Byte;
{ This Function requires the Dos Unit. Returned values mean the following -
0 = Printer is okay
1 = Printer is out of paper
2 = Printer is offline
3 = Printer is busy
4 = God knows what's wrong With the Printer but I'd get an engineer out.}
Var
Regs : Registers;
begin
With Regs do
begin
Ah := 2;
Dx := LPTport;
intr($17,Regs);
if (Ah and $B8) = $90 then PrinterReport := 0
else if (Ah and $20) = $20 then PrinterReport := 1
else if (Ah and $10) = $00 then PrinterReport := 2
else if (Ah and $80) = $00 then PrinterReport := 3
else if (Ah and $08) = $08 then PrinterReport := 4;
end;
end; { of Function }
{
As For trapping runtime errors, all you have to do is replace the
standard Exit Procedure With your own. For example...
}
Program JohnMajorGoosedTheCook;
Var
SavedExitPoint : Pointer; { This holds the old Exit proc value }
Number : Integer;
{$F+}
Procedure MyExitProc;
{$F-}
begin
if errorAddr <> NIL then { if you got a runtime error... }
begin
Writeln ('The Programmer got it wrong again. There has been an');
Writeln ('error at ',seg(errorAddr^), ':', ofs(errorAddr^));
Writeln ('with an Exit code of ',exitCode);
Writeln ('Please call him on 123-4567 and give him dogs abuse.');
errorAddr := NIL; { which cancels the runtime error address...}
ExitCode := 0; { which cancels the runtime error code }
end;
Exitproc := SavedExitPoint; { restore the old Exit Procedure...}
end; { of Procedure }
begin
SavedExitPoint := ExitProc; { Save the old Exit Procedure... }
ExitProc := @MyExitProc; { ...and replace it With your own }
Number := 0; { Uh oh... }
Writeln (4 div Number); { Oh dear...}
end. { of PROGRAM }
[Back to PRINTING SWAG index] [Back to Main SWAG index] [Original]