[Back to TEXTFILE SWAG index] [Back to Main SWAG index] [Original]
PROGRAM PaginateTextFiles;
CONST
ProgData = 'PAGINATE- Free DOS utility: text file paginator.';
ProgDat2 = 'V1.00: July 14, 1993. (c) 1993 by David Daniel Anderson - Reign Ware.';
Usage = 'Usage: PAGINATE /i<infile> /o<outfile> /l##[:##] (lines per odd/even page)';
Example = 'Example: PAGINATE /iNOTPAGED.TXT /oPAGED.TXT /l55';
VAR
IFL, OFL, LPP : String[80];
InFile, OutFile : Text;
OddL,EvenL : Word;
PROCEDURE InValidParms( ErrCode : Word );
VAR
Message : String[80];
BEGIN
WriteLn(Usage);
WriteLn(Example);
CASE ErrCode OF
1 : Message := 'Incorrect number of parameters on command line.';
2 : Message := 'Invalid switch on command line.';
3 : Message := 'Cannot open input file '+ IFL + '.';
4 : Message := 'Cannot open NEW output file '+ OFL + '.';
5 : Message := 'Non-numeric '+ LPP + ' specified for lines per page.';
ELSE
Message := 'Unknown error.';
END;
Writeln(Message);
Halt;
END;
PROCEDURE ParseComLine;
CONST
Bad = ''; {An invalid filename character & invalid integer.}
VAR
SwStr : String[1];
SwChar : Char;
ic : Byte;
ArgText : String[80];
BEGIN
IF ParamCount <> 3 THEN
InValidParms(1);
IFL := Bad; OFL := Bad; LPP := Bad;
FOR ic := 1 to 3 DO
BEGIN
SwStr := Copy(ParamStr(ic),1,1);
SwChar := UpCase(SwStr[1]);
IF (SwChar <> '/') THEN
InValidParms(2);
SwStr := Copy(ParamStr(ic),2,1);
SwChar := UpCase(SwStr[1]);
ArgText := Copy(ParamStr(ic),3,(Length(ParamStr(ic))-2));
CASE SwChar OF
'I' : IFL := ArgText;
'O' : OFL := ArgText;
'L' : LPP := ArgText;
END;
END;
END;
PROCEDURE Open_I_O_Files;
BEGIN
Assign(InFile,IFL);
{$I-} Reset(InFile); {$I+}
IF IOResult <> 0 THEN
InValidParms(3);
Assign(OutFile,OFL);
{$I-} Rewrite(OutFile); {$I+}
IF IOResult <> 0 THEN
InValidParms(4);
END;
PROCEDURE GetEvenOdd ( lpp_param : string; var oddnum, evennum : Word);
{ determine page length for odd/ even pages }
VAR
odds, evens, { string of odd/ even lines per page }
lstr : string[5]; { entire string containing numbers needed }
vlppo,vlppe, { numeric of lines per page odd/even }
lval : byte; { numeric of string containing numbers needed }
pcode : integer; { error code, will be non-zero if strings are not numbers }
BEGIN
lstr := lpp_param;
IF ((pos(':',lstr)) <> 0) THEN
BEGIN { determine position of }
odds := copy(lstr,1,((pos(':',lstr))-1)); { any colon, and divide }
evens := copy(lstr,((pos(':',lstr))+1),length(lstr)); { at that point }
val(odds,vlppo,pcode); { convert first part of string }
IF (pcode <> 0) THEN { into numeric }
InValidParms(5); { show help if any errors }
val(evens,vlppe,pcode); { convert first part of string }
IF (pcode <> 0) THEN { into numeric }
InValidParms(5); { show help if any errors }
END
ELSE BEGIN { if colon not present, lines/pg should be entire parameter }
val(lstr,lval,pcode); { convert entire of string }
IF (pcode <> 0) THEN { into numeric }
InValidParms(5); { show help if any errors }
vlppo := lval;
vlppe := lval;
END;
oddnum := vlppo;
evennum := vlppe;
END;
PROCEDURE InsertFF( OddLines, EvenLines : Word);
CONST
FF = '';
VAR
LinesCopied,
LinesPerPage,
PageCopying : Word;
ALine : String;
BEGIN
LinesCopied := 0;
LinesPerPage := OddLines;
PageCopying := 1;
WHILE (NOT Eof(InFile)) DO
BEGIN
ReadLn(InFile,ALine);
IF (LinesCopied = LinesPerPage) THEN
BEGIN
ALine := FF + ALine;
LinesCopied := 0;
PageCopying := Succ(PageCopying);
IF ((PageCopying MOD 2) = 0) THEN
LinesPerPage := EvenLines
ELSE
LinesPerPage := OddLines;
END;
WriteLn(OutFile,ALine);
LinesCopied := Succ(LinesCopied);
END;
END;
BEGIN { main }
Writeln(ProgData);
Writeln(ProgDat2);
Writeln;
ParseComLine;
Open_I_O_Files;
GetEvenOdd(LPP,OddL,EvenL);
Writeln('Input file: ',IFL,' - Output file: ',OFL,'.');
Writeln('Lines per odd / even page: ',Oddl,' / ',EvenL,'.');
InsertFF(OddL,EvenL);
Close(InFile);
Close(OutFile);
Writeln('Done!');
END.
[Back to TEXTFILE SWAG index] [Back to Main SWAG index] [Original]