home *** CD-ROM | disk | FTP | other *** search
- (* Chapter 16 - Program 6 *)
- program List_Pascal_Source_Files;
-
- (* This program can be used to list programs written in any language
- on the line printer. It will list the filename, the latest date
- and time when the file was modified, and the contents with line
- numbers. If there are more than 70 characters on any line, the
- remaining characters will be spilled to the next line. To space
- the paper up, a formfeed is used. *)
-
- Uses Printer, Dos;
-
- const Max_Lines_Per_Page = 55;
-
- type Command_String = string[127];
-
- var Input_File : text;
- Input_Line : string[140];
- Line_Number : integer;
- Lines_Printed : integer;
- Page_No : integer;
- Index : integer;
- Filename : Command_String;
- Date : DateTime;
-
-
- procedure Initialize; (* ****************************** initialize *)
- var Time_And_Date : longint;
- begin
- if ParamCount = 1 then
- Filename := ParamStr(1)
- else begin
- Write('Enter filename ----> ');
- Readln(Filename);
- end;
- Assign(Input_File,Filename);
- Reset(Input_File);
- Line_Number := 1;
- Lines_Printed := 66; (* This is to force a header immediately *)
- Page_No := 1;
- GetFTime(Input_File, Time_And_Date);
- UnpackTime(Time_And_Date, Date);
- end;
-
-
- procedure Read_A_Line; (* *************************** read a line *)
- begin
- for Index := 1 to 140 do Input_Line[Index] := ' ';
- Readln(Input_File,Input_Line);
- end;
-
-
- procedure Format_And_Print; (* ****************** format and print *)
- var Line_Length : byte;
- begin
- Write(Lst,Line_Number:6,' ');
- Line_Length := 0;
- for Index := 1 to 140 do begin
- if Input_Line[Index] <> ' ' then Line_Length := Index;
- end;
- for Index := 1 to Line_Length do
- Write(Lst,Input_Line[Index]);
- Writeln(Lst);
- Lines_Printed := Lines_Printed + 1;
- Line_Number := Line_Number + 1;
- end;
-
-
- procedure Check_For_Page; (* ********************** check for page *)
- begin
- if Lines_Printed > Max_Lines_Per_Page then begin
- if Page_No > 1 then
- Writeln(Lst,Char(12));
- Writeln(Lst);
- Write(Lst,' ');
- Write(Lst,'Source file --->',Filename:13);
- Write(Lst,Date.Month:5,'/',Date.Day:2,'/',Date.Year:2);
- Write(Lst,Date.Hour:5,':',Date.Min:2,':',Date.Sec:2);
- WriteLn(Lst,' Page':10,Page_No:4);
- Writeln(Lst);
- Write('Source file --->',Filename:12);
- Writeln(' page':12,Page_No:4);
- Page_No := Page_No + 1;
- Lines_Printed := 1;
- end;
- end;
-
-
- begin (* ******************************************* main program *)
- Initialize;
- Check_For_Page;
- repeat
- Read_A_Line;
- Format_And_Print;
- Check_For_Page;
- until Eof(Input_File);
- Writeln(Lst,Char(12));
- end. (* of main program *)