home *** CD-ROM | disk | FTP | other *** search
-
- 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}.
-