home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / INFO / TURBOPAS / PAGER.ZIP / PAGER.PAS
Encoding:
Pascal/Delphi Source File  |  1985-12-28  |  4.4 KB  |  165 lines

  1. PROGRAM Pager;
  2.  
  3.   {
  4.   | Purpose: Allow spooling of paginated files from a given start page
  5.   | Author:  David A. Peterson
  6.   | Created: 23 August 1985
  7.   | Modifications: ( Listed most recent first )
  8.   }
  9.  
  10.   CONST
  11.     Version = 'pager [1.0a] 23 Aug 85';
  12.  
  13.   TYPE
  14.     FileName = String[ 24];
  15.     ALine    = String[ 40];
  16.     BigLine  = String[255];
  17.  
  18.   VAR
  19.     InName    : FileName;
  20.     OutName   : FileName;
  21.     StartPage : Integer;
  22.     NumPages  : Integer;
  23.     InFile    : Text[4096];
  24.     OutFile   : Text[4096];
  25.  
  26.   PROCEDURE Usage ( Oops : ALine );
  27.  
  28.     BEGIN { Usage }
  29.       WriteLn;
  30.       WriteLn (Oops);
  31.       WriteLn ('USAGE: pager <in file name> <out file name> <start page> <number of pages>');
  32.       WriteLn ('  Valid devices: LST:, CON:');
  33.       WriteLn;
  34.       Halt
  35.     END;  { Usage }
  36.  
  37.   PROCEDURE GetParams;
  38.  
  39.     VAR
  40.       ErrorLoc : Integer;
  41.  
  42.     BEGIN { GetParams }
  43.       InName  := ParamStr (1);
  44.       OutName := ParamStr (2);
  45.       Assign (InFile, InName);
  46.       Assign (OutFile, OutName);
  47.       Val (ParamStr (3), StartPage, ErrorLoc);
  48.       IF ErrorLoc > 0 THEN
  49.         Usage ('Invalid starting page number.');
  50.       Val (ParamStr (4), NumPages, ErrorLoc);
  51.       IF ErrorLoc > 0 THEN
  52.         Usage ('Invalid number of pages.');
  53.     END;  { GetParams }
  54.  
  55.   PROCEDURE DumpFile;
  56.  
  57.     CONST
  58.       BackSpace = #08;
  59.       Escape    = #27;
  60.       FormFeed  = #12;
  61.       Space     = ' ';
  62.  
  63.     VAR
  64.       BigLn   : BigLine;
  65.       AbortIt : Boolean;
  66.       DumpIt  : Boolean;
  67.       Ch      : Char;
  68.       Column  : Integer;
  69.       Count   : Integer;
  70.       CurPage : Integer;
  71.       Row     : Integer;
  72.  
  73.     BEGIN { DumpFile }
  74.       Count   := 0;
  75.       CurPage := 0;
  76.       WriteLn;
  77.       WriteLn (Version);
  78.       Write ('Page number : ');
  79.       Column := WhereX;
  80.       Row    := WhereY;
  81.       WHILE NOT Eof (InFile) DO
  82.         BEGIN
  83.           ReadLn (InFile, BigLn);
  84.           DumpIt := True;
  85.           IF KeyPressed THEN
  86.             BEGIN
  87.               Read (Kbd, Ch);
  88.               IF Ch = Escape THEN
  89.                 BEGIN
  90.                   WriteLn;
  91.                   WriteLn;
  92.                   ClrEol;
  93.                   Write ('Abort pager ? Y', BackSpace);
  94.                   Read (Kbd, Ch);
  95.                   AbortIt := NOT (Ch IN ['N', 'n'] );
  96.                   IF AbortIt THEN
  97.                     Write ('Yes')
  98.                   ELSE
  99.                     Write ('No');
  100.                   IF AbortIt THEN
  101.                     Halt
  102.                   ELSE
  103.                     BEGIN
  104.                       Delay (500);
  105.                       GotoXy (1, WhereY);
  106.                       ClrEol
  107.                     END
  108.                 END
  109.             END;
  110.           IF Length (BigLn) > 0 THEN
  111.             IF BigLn[1] = FormFeed THEN
  112.               BEGIN
  113.                 CurPage := CurPage + 1;
  114.                 IF      CurPage > StartPage THEN
  115.                   Count := Count + 1
  116.                 ELSE IF CurPage = StartPage THEN
  117.                   BEGIN
  118.                     Count := Count + 1;
  119.                     GotoXy (Column, Row);
  120.                     Write (CurPage);
  121.                     WriteLn;
  122.                     WriteLn;
  123.                     Write ('Skip the form feed for this first page ? Y', BackSpace);
  124.                     Read (Kbd, Ch);
  125.                     DumpIt := Ch IN ['N', 'n'];
  126.                     IF DumpIt THEN
  127.                       Write ('No')
  128.                     ELSE
  129.                       Write ('Yes');
  130.                     Delay (500);
  131.                     GotoXy (1, WhereY);
  132.                     ClrEol;
  133.                     IF WhereY <> Row + 2 THEN
  134.                       Row := WhereY - 2
  135.                   END;
  136.                 IF Count > NumPages THEN
  137.                   Halt;
  138.                 GotoXy (Column, Row);
  139.                 Write (CurPage)
  140.               END;
  141.           IF (CurPage >= StartPage) AND DumpIt THEN
  142.             WriteLn (OutFile, BigLn)
  143.         END
  144.     END;  { DumpFile }
  145.  
  146.   BEGIN { Pager }
  147.     IF ParamCount <> 4 THEN
  148.       Usage ('Wrong number of parameters entered.')
  149.     ELSE
  150.       BEGIN
  151.         GetParams;
  152.         {$I-}
  153.         Reset (InFile);
  154.         {$I+}
  155.         IF IoResult <> 0 THEN
  156.           Usage ('Invalid input file name.');
  157.         {$I-}
  158.         Reset (OutFile);
  159.         {$I+}
  160.         IF IoResult <> 0 THEN
  161.           Usage ('Invalid output file name.');
  162.         DumpFile
  163.       END
  164.   END   { Pager }.
  165.