home *** CD-ROM | disk | FTP | other *** search
/ POINT Software Programming / PPROG1.ISO / pascal / visionix / vtextu.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1993-12-28  |  6.4 KB  |  371 lines

  1. {
  2.  ════════════════════════════════════════════════════════════════════════════
  3.  
  4.  Visionix "Text File" Read Unit (VTEXT)
  5.    Version 0.6
  6.  Copyright 1991,92,93 Visionix
  7.  ALL RIGHTS RESERVED
  8.  
  9.  ────────────────────────────────────────────────────────────────────────────
  10.  
  11.  Revision history in reverse chronological order:
  12.  
  13.  Initials  Date      Comment
  14.  ────────  ────────  ────────────────────────────────────────────────────────
  15.  
  16.  jrt       11/15/93  NEED TO MAKE WORK IN OS/2--dos functions
  17.                      are currently IFDEFed out.
  18.  
  19.  jrt       08/04/93  First logged revision.
  20.  
  21.  ════════════════════════════════════════════════════════════════════════════
  22. }
  23.  
  24. (*-
  25.  
  26. [TEXT]
  27.  
  28. <Overview>
  29.  
  30. This function implements a text file device driver which "strips" or
  31. ignores ASCII CTRL-Z (End Of File, EOF) markers.
  32.  
  33.  
  34. <Interface>
  35.  
  36. -*)
  37.  
  38.  
  39. Unit VTextu;
  40.  
  41. Interface
  42.  
  43. Uses
  44.  
  45.   VTypesu,
  46.   VStringu,
  47.   VGenu,
  48.   DOS;
  49.  
  50.  
  51. Procedure VTextAssign(            Flags     : WORD;
  52.                               Var F         : Text;
  53.                                   FName     : STRING           );
  54.  
  55.  
  56.  
  57.  
  58. Implementation
  59.  
  60. Type
  61.  
  62.   TTFDDExInfo = RECORD
  63.  
  64.  
  65.  
  66.  
  67.   END;
  68.  
  69. Type
  70.  
  71.   TMyTextRec = RECORD
  72.  
  73.     Handle        : WORD;
  74.     Mode          : WORD;
  75.     BufSize       : WORD;
  76.     isPrivate     : WORD;
  77.     BufPos        : WORD;
  78.     Bufend        : WORD;
  79.     BufPtr        : POINTER;
  80.     OpenFunc      : POINTER;
  81.     InOutFunc     : POINTER;
  82.     FlushFunc     : POINTER;
  83.     CloseFunc     : POINTER;
  84.  
  85.     TheFile       : ^FILE;
  86.     TheOfs        : LONGINT;
  87.     Reserved      : Array[1..8] of BYTE;
  88.  
  89.     Name          : Array[0..79] of CHAR;
  90.     Buffer        : Array[0..127] of CHAR;
  91.  
  92.   END;
  93.  
  94.  
  95.   PMyTextRecData = ^TMyTextRec;
  96.  
  97.  
  98. {────────────────────────────────────────────────────────────────────────────}
  99.  
  100.  
  101. Function VTextReadInOutFunc(  Var F         : Text         ) : INTEGER;
  102. Far;
  103. Var
  104.  
  105.   Err : WORD;
  106.  
  107. {$IFNDEF OS2}
  108.   R   : REGISTERS;
  109. {$ENDIF}
  110.  
  111.   Z   : INTEGER;
  112.  
  113. BEGIN
  114.  
  115.   With TMyTextRec( F ) Do
  116.   BEGIN
  117.  
  118.     {$IFNDEF OS2}
  119.  
  120.       R.AH := $3F;
  121.       R.BX := FileRec( TheFile^ ).Handle;
  122.  
  123.       R.CX := BufSize;
  124.  
  125.       R.DS := Seg( BufPtr^ );
  126.       R.DX := Ofs( BufPtr^ );
  127.  
  128.       Intr( $21, R );
  129.  
  130.       If Odd( R.Flags ) Then
  131.       BEGIN
  132.  
  133.         VTextReadInOutFunc := R.AX;
  134.  
  135.       END
  136.       ELSE
  137.       BEGIN
  138.  
  139.  
  140.         { Replace any CTRL-Zs with a 0 }
  141.  
  142.         BufferSRByte( @Buffer, BufSize, $1A, 0 );
  143.  
  144.         BufPos := 0;
  145.  
  146.         BufEnd := R.AX;
  147.  
  148.         VTextReadInOutFunc := 0;
  149.  
  150.       END; { If Odd( r.flags ) }
  151.  
  152.     {$ELSE}
  153.  
  154.     {$ENDIF}
  155.  
  156.   END; { with }
  157.  
  158. END; { VTextReadInOutFunc }
  159.  
  160. {────────────────────────────────────────────────────────────────────────────}
  161.  
  162. Function VTextReadFlushFunc(  Var F         : Text         ) : INTEGER;
  163. Far;
  164.  
  165. BEGIN
  166.  
  167.   With TextRec( F ) Do
  168.   BEGIN
  169. (*
  170.     BufPos := 0;
  171.     BufEnd := 0;
  172. *)
  173.   END;
  174.  
  175.   VTextReadFlushFunc := 0;
  176.  
  177. END;
  178.  
  179. {────────────────────────────────────────────────────────────────────────────}
  180.  
  181. Function VTextReadCloseFunc(  Var F         : Text         ) : INTEGER;
  182. Far;
  183.  
  184. BEGIN
  185.  
  186.   With TMyTextRec( F ) Do
  187.   BEGIN
  188.  
  189.     Close( TheFile^ );
  190.  
  191.     Dispose( TheFile );
  192.  
  193.     VTextReadCloseFunc := IOResult;
  194.  
  195.   END;
  196.  
  197. END;
  198.  
  199. {────────────────────────────────────────────────────────────────────────────}
  200.  
  201. Function VTextWriteInOutFunc( Var F         : Text         ) : INTEGER;
  202. Far;
  203.  
  204. BEGIN
  205.  
  206.   With TextRec( F ) Do
  207.   BEGIN
  208.  
  209.  
  210.   END;
  211.  
  212. END;
  213.  
  214. {────────────────────────────────────────────────────────────────────────────}
  215.  
  216. Function VTextWriteFlushFunc( Var F         : Text         ) : INTEGER;
  217. Far;
  218.  
  219. BEGIN
  220.  
  221.   With TextRec( F ) Do
  222.   BEGIN
  223.  
  224.  
  225.   END;
  226.  
  227. END;
  228.  
  229. {────────────────────────────────────────────────────────────────────────────}
  230.  
  231. Function VTextwriteCloseFunc( Var F         : Text         ) : INTEGER;
  232. Far;
  233.  
  234. BEGIN
  235.  
  236.   With TextRec( F ) Do
  237.   BEGIN
  238.  
  239.  
  240.   END;
  241.  
  242. END;
  243.  
  244. {────────────────────────────────────────────────────────────────────────────}
  245.  
  246. Function VTextOpenFunc(       Var F         : Text         ) : INTEGER;
  247. Far;
  248.  
  249. Var
  250.  
  251.   S : STRING;
  252. {$IFNDEF OS2}
  253.   R : REGISTERS;
  254. {$ENDIF}
  255.   Z : INTEGER;
  256.  
  257. BEGIN
  258.  
  259.   With TMyTextRec( F ) Do
  260.   BEGIN
  261.  
  262.     Case Mode of
  263.  
  264.       fmInOut:
  265.       BEGIN
  266.  
  267.  
  268.       END;
  269.  
  270.       fmOutput:
  271.       BEGIN
  272.  
  273.       END;
  274.  
  275.       fmInput:
  276.       BEGIN
  277.  
  278.         {$IFNDEF OS2}
  279.  
  280.           R.AH := $3D;
  281.           R.AL := FileMode;
  282.           R.DS := Seg( Name );
  283.           R.DX := Ofs( Name );
  284.  
  285.           Intr( $21, R );
  286.  
  287.           If Odd( R.Flags ) Then
  288.           BEGIN
  289.  
  290.             VTextOpenFunc := R.AX;
  291.  
  292.           END
  293.           ELSE
  294.           BEGIN
  295.  
  296.             FileRec( TheFile^ ).Handle  := R.AX;
  297.             FileRec( TheFile^ ).Mode    := fmInOut;
  298.             FileRec( TheFile^ ).RecSize := 1;
  299.  
  300.             For Z:=1 to 26 Do
  301.               FileRec( TheFile^ ).Private[Z]  := 0;
  302.  
  303.             For Z:=1 to 16 Do
  304.               FileRec( TheFile^ ).UserData[Z] := 0;
  305.  
  306.             Move( Name, FileRec( TheFile^ ).Name, 80 );
  307.  
  308.             InOutFunc    := @VTextReadInOutFunc;
  309.             FlushFunc    := @VTextReadFlushFunc;
  310.             CloseFunc    := @VTextReadCloseFunc;
  311.  
  312.             Handle       := R.AX;
  313.             Mode         := fmInput;
  314.             BufPos       := 0;
  315.  
  316.             VTextOpenFunc := 0;
  317.  
  318.           END;
  319.  
  320.         {$ELSE}
  321.  
  322.         {$ENDIF}
  323.  
  324.       END; { Case Mod of fmInput }
  325.  
  326.     END; { Case Mode of }
  327.  
  328.   END; { With textrec( f ) }
  329.  
  330. END; { Function VTextOpenFunc }
  331.  
  332. {────────────────────────────────────────────────────────────────────────────}
  333.  
  334.  
  335. Procedure VTextAssign(            Flags     : WORD;
  336.                               Var F         : Text;
  337.                                   FName     : STRING           );
  338.  
  339.  
  340.  
  341. BEGIN
  342.  
  343.   With TMyTextRec( F ) Do
  344.   BEGIN
  345.  
  346.     Mode         := fmClosed;
  347.     BufSize      := SizeOf( Buffer );
  348.     BufPtr       := @Buffer;
  349.     OpenFunc     := @VTextOpenFunc;
  350.     InOutFunc    := NIL;
  351.     FlushFunc    := NIL;
  352.     CloseFunc    := NIL;
  353.  
  354.     StrToAsciiZ( FName, Name );
  355.  
  356.     New( TheFile );
  357.  
  358.   END;
  359.  
  360. END;
  361.  
  362. {tom kimb 628-0363}
  363.  
  364. {────────────────────────────────────────────────────────────────────────────}
  365. {────────────────────────────────────────────────────────────────────────────}
  366. {────────────────────────────────────────────────────────────────────────────}
  367.  
  368.  
  369. BEGIN
  370.  
  371. END.