home *** CD-ROM | disk | FTP | other *** search
- PROGRAM Pager;
-
- {
- | Purpose: Allow spooling of paginated files from a given start page
- | Author: David A. Peterson
- | Created: 23 August 1985
- | Modifications: ( Listed most recent first )
- }
-
- CONST
- Version = 'pager [1.0a] 23 Aug 85';
-
- TYPE
- FileName = String[ 24];
- ALine = String[ 40];
- BigLine = String[255];
-
- VAR
- InName : FileName;
- OutName : FileName;
- StartPage : Integer;
- NumPages : Integer;
- InFile : Text[4096];
- OutFile : Text[4096];
-
- PROCEDURE Usage ( Oops : ALine );
-
- BEGIN { Usage }
- WriteLn;
- WriteLn (Oops);
- WriteLn ('USAGE: pager <in file name> <out file name> <start page> <number of pages>');
- WriteLn (' Valid devices: LST:, CON:');
- WriteLn;
- Halt
- END; { Usage }
-
- PROCEDURE GetParams;
-
- VAR
- ErrorLoc : Integer;
-
- BEGIN { GetParams }
- InName := ParamStr (1);
- OutName := ParamStr (2);
- Assign (InFile, InName);
- Assign (OutFile, OutName);
- Val (ParamStr (3), StartPage, ErrorLoc);
- IF ErrorLoc > 0 THEN
- Usage ('Invalid starting page number.');
- Val (ParamStr (4), NumPages, ErrorLoc);
- IF ErrorLoc > 0 THEN
- Usage ('Invalid number of pages.');
- END; { GetParams }
-
- PROCEDURE DumpFile;
-
- CONST
- BackSpace = #08;
- Escape = #27;
- FormFeed = #12;
- Space = ' ';
-
- VAR
- BigLn : BigLine;
- AbortIt : Boolean;
- DumpIt : Boolean;
- Ch : Char;
- Column : Integer;
- Count : Integer;
- CurPage : Integer;
- Row : Integer;
-
- BEGIN { DumpFile }
- Count := 0;
- CurPage := 0;
- WriteLn;
- WriteLn (Version);
- Write ('Page number : ');
- Column := WhereX;
- Row := WhereY;
- WHILE NOT Eof (InFile) DO
- BEGIN
- ReadLn (InFile, BigLn);
- DumpIt := True;
- IF KeyPressed THEN
- BEGIN
- Read (Kbd, Ch);
- IF Ch = Escape THEN
- BEGIN
- WriteLn;
- WriteLn;
- ClrEol;
- Write ('Abort pager ? Y', BackSpace);
- Read (Kbd, Ch);
- AbortIt := NOT (Ch IN ['N', 'n'] );
- IF AbortIt THEN
- Write ('Yes')
- ELSE
- Write ('No');
- IF AbortIt THEN
- Halt
- ELSE
- BEGIN
- Delay (500);
- GotoXy (1, WhereY);
- ClrEol
- END
- END
- END;
- IF Length (BigLn) > 0 THEN
- IF BigLn[1] = FormFeed THEN
- BEGIN
- CurPage := CurPage + 1;
- IF CurPage > StartPage THEN
- Count := Count + 1
- ELSE IF CurPage = StartPage THEN
- BEGIN
- Count := Count + 1;
- GotoXy (Column, Row);
- Write (CurPage);
- WriteLn;
- WriteLn;
- Write ('Skip the form feed for this first page ? Y', BackSpace);
- Read (Kbd, Ch);
- DumpIt := Ch IN ['N', 'n'];
- IF DumpIt THEN
- Write ('No')
- ELSE
- Write ('Yes');
- Delay (500);
- GotoXy (1, WhereY);
- ClrEol;
- IF WhereY <> Row + 2 THEN
- Row := WhereY - 2
- END;
- IF Count > NumPages THEN
- Halt;
- GotoXy (Column, Row);
- Write (CurPage)
- END;
- IF (CurPage >= StartPage) AND DumpIt THEN
- WriteLn (OutFile, BigLn)
- END
- END; { DumpFile }
-
- BEGIN { Pager }
- IF ParamCount <> 4 THEN
- Usage ('Wrong number of parameters entered.')
- ELSE
- BEGIN
- GetParams;
- {$I-}
- Reset (InFile);
- {$I+}
- IF IoResult <> 0 THEN
- Usage ('Invalid input file name.');
- {$I-}
- Reset (OutFile);
- {$I+}
- IF IoResult <> 0 THEN
- Usage ('Invalid output file name.');
- DumpFile
- END
- END { Pager }.