home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Simtel MSDOS 1996 September
/
Simtel-MSDOS-Sep1996-CD2.iso
/
disc2
/
turbopas
/
raw_lpt.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1989-12-17
|
2KB
|
84 lines
Date: Monday, 27 November 1989 09:11-MST
From: Leonard Campbell <UCIC309%UNLVM.BITNET@ricevm1.rice.edu>
To: Info-IBMPC@WSMRSIMTEL20.ARMY.MIL
Re: ^Z problem in turbo pascal
By Default Turbo pascal uses a file handle that filters out ^Z's and
posibly massages other characters (such as tabs). I have a small program
stub that changes the file handle to process characters in 'RAW' mode.
Program follows:
PROGRAM printout; { This stub allow you to write the EOF char to }
{ device LPT1}
USES dos;
VAR
ExitSave: pointer;
dosregs:dos.registers;
Lst: FILE;
PROCEDURE init;
VAR
i, j: Integer;
BEGIN
IF ParamCount = 0 THEN BEGIN
Writeln('NO argument given');
Writeln('SYNTAX: cmd <outputloc>');
Writeln(' outputloc is the destination (default PRN)');
Writeln(' ... more desc');
Halt; END;
IF ParamCount > 0 THEN outn := ParamSTR(1)
ELSE outn := 'LPT1';
Assign(Lst, outn); {$i-}
Rewrite(Lst, 1); {$i+}
IF IOresult <> 0 THEN BEGIN
Writeln('Error opening output file:', outn);
Halt; END;
Writeln(' Output routed to ', outn);
with dosregs do begin { here is where we change mode}
ah := $44; { get device info}
al := $00;
bx := filerec(lst).handle;
msdos(dosregs);
devinfo := dx;
isptr := 0 <> (dx and $0080); {if device is block char device then}
if isptr then begin
ah := $44;
al := $01;
bx := filerec(lst).handle;
dx := devinfo or $0020; {set device to RAW mode}
dh := 0;
msdos(dosregs); end; end;
isopen := true;
END {init};
{$F+}
procedure ExitHandler;
{ Return the ptr to chr device }
begin
if isopen then begin
if isptr then with dosregs do begin
ah := $44; { set device info}
al := $01;
bx := filerec(lst).handle;
dx := devinfo;
dh := 0;
msdos(dosregs); end;
close(lst); end;
ExitProc := ExitSave
end;
{$F-}
BEGIN {listfont}
isopen := false;
ExitSave := ExitProc;
ExitProc := @ExitHandler;
init;
{do your stuf here}
{I.E. for i := 0 to 255 do write(lst,chr(i)); }
END.{printout}.