CgFILEEXISDEFTGFILEEXISMODVxSRCLIST DOCë SRCLIST MOD "äpÿ-07JAN86DWNOÜÿSRCLIST MOD!'Õÿ DEFINITION MODULE fileexists; (* glenn brooke 1/4/87 from TM2 manual *) FROM files IMPORT FILE, Open, Close; FROM strings IMPORT String; VAR f : FILE; PROCEDURE exists(fn : String) : BOOLEAN; END fileexists. IMPLEMENTATION MODULE fileexists; (* glenn brooke 1/4/87 from TM2 manual *) PROCEDURE exists(fn : String) : BOOLEAN; BEGIN IF Open(f, fn) THEN Close(f); RETURN TRUE; ELSE RETURN FALSE; END; END exists; END fileexists.  DOCUMENTATION for SRCLIST ========================= Glenn Brooke 1/7/87 SRCLIST lists text files (i.e., program source files) to the printer, with optional pagination. It features wrap-around of lines longer than 80 characters (which doesn't screw up pagination). SRCLIST is written in Turbo Modula-2, and demonstrates some string manipulation. Two other modules, FILEEXIS.DEF and FILEEXIS.MOD are needed to compile SRCLIST.MOD. These contain the simple procedure to test for file existence. SRCLIST is not for sale or for profit. Copy and distribute free of charge. MODULE sourcelister; (* translated to Turbo Modula-2 by Glenn Brooke 1/5/87 Ok, another file lister. Yes, it's better. Sigh. Actually, this is a significant improvement over any other lister I've seen -- it handles lines longer than 80 characters without screwing up the pagination! It's especially great for program source listings. To use, compile with Turbo Modula-2, and run! You can run this as an .MCD file from within the TM2 compiler/editor shell (it takes about 2K). The program will prompt you for filenames and whether you want pagination or not. Pagination provides the filename and page # on each page. You can modify the source to your heart's content. I use 79 columns per line and 55 lines per page most frequently. Important note : program works only with text (ASCII) files. Intended for the public domain. This program may not be sold or used for profit without the express written permission of Glenn Brooke. Glenn Brooke 1025 Garnett Place Evanston, IL 60201 Lillipute Z-node (312)649-1730 *) FROM strings IMPORT String, Length; FROM texts IMPORT TEXT, OpenText, CloseText,EOT,output,CreateText, ReadLine; FROM fileexis IMPORT exists; TYPE filename = String; VAR filetolist : filename; CH : CHAR; pagination,ok : BOOLEAN; PROCEDURE ListFile(name : filename; pagination : BOOLEAN); (*lists files with wraparound, pagination if desired, on lst: device*) CONST MaxLinesPerPage = 55; (* you can change these to suit yourself *) MaxCharPerLine = 79; VAR line : String; i,L, linecount, pagecount : INTEGER; filetoshow : TEXT; BEGIN IF NOT OpenText(filetoshow, Name) THEN WRITELN("Sorry, couldn't open ", filetoshow); HALT; END; (* if then *) linecount := 0; pagecount := 1; IF pagination THEN WRITELN(output); WRITELN(output,' ',Name,' Page ',pagecount); WRITELN(output); ELSE WRITELN(output); WRITELN(output); WRITELN(output); END; (* if then else *) WHILE NOT EOT(filetoshow) DO line := ''; ReadLine(filetoshow,line); l := Length(line); IF l <= MaxCharPerLine THEN INC(linecount); WRITELN(output,line); ELSE (*handle lines longer than MaxCharPerLine*) FOR i := 1 TO l DO WRITE(output,line[i]); (*WRITE char by char*) IF i MOD MaxCharPerLine = 0 THEN (*begin new line*) WRITELN(output); INC(linecount); END (*if*) END; (* for *) WRITELN(output); INC(linecount) END; (* if then else *) IF linecount >= MaxLinesPerPage THEN (*begin new page*) WRITELN(output); WRITELN(output); WRITELN(output); WRITELN(output); WRITELN(output); linecount := 0; INC(pagecount); IF pagination THEN WRITELN(output); WRITELN(output,' ',Name,' Page ',pagecount); ELSE WRITELN(output); WRITELN(output); END; (* if then else *) WRITELN(output);WRITELN(output);WRITELN(output);WRITELN(output); END; (* if then *) END; (*while*) CloseText(filetoshow); END ListFile; BEGIN (* main program body *) WRITELN(" Source file lister -- make sure printer is on!"); WRITE(" Enter name of file to list (RET to quit) : "); READLN(filetolist); IF filetolist = "" THEN HALT END; IF NOT exists(filetolist) THEN WRITELN(" Sorry, coudn't find ", filetolist); HALT; END; (* if then *) WRITE(" Do you want pagination (Y/N) ? "); READ(ch); IF CAP(ch) = "Y" THEN pagination := TRUE; ELSE pagination := FALSE; END; (* if then *) CreateText(output, "LST:"); (* send output to printer *) ListFile(filetolist, pagination); CloseText(output); END sourcelister.