home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / TURBOM2 / FDUMP.LBR / FDUMP.MZD / FDUMP.MOD
Text File  |  2000-06-30  |  5KB  |  218 lines

  1. (*********************************************************************)
  2. (* Stand alone program to dump a file to the screen and/or printer   *)
  3. (* Written By Ed Jackson, GIlroy, CA.  Released to the Public Domain *)
  4. (* With the only restriction that this notice cannot be removed.     *)
  5. (* July 1987                                                         *)
  6. (*********************************************************************)
  7.  
  8. MODULE Fdump;
  9. FROM Terminal IMPORT ClearScreen, Highlight;
  10. FROM Texts    IMPORT ReadString, ReadLine, ReadLn, WriteLn, OpenText,
  11.                      CloseText, CreateText, console, TEXT, WriteCard,
  12.                      WriteString, TextFile, ReadChar, WriteChar, input,
  13.                      SetCol, haltOnControlC, EOT;
  14. FROM ComLine  IMPORT commandLine, PromptFor;
  15. FROM Strings  IMPORT CAPS;
  16. FROM Files    IMPORT GetName, FILE, Open, Close, EOF, ReadBytes;
  17. FROM SYSTEM   IMPORT ADR, WORD, BYTE;
  18.  
  19. (*  GLOBAL CONSTANTS  *)
  20. CONST
  21.   PageSize         = 50;   (*  Number of lines printed on page  *)
  22.   FormFeed         = 14C;  (*  Printer Top of Form              *)
  23.  
  24. PROCEDURE GetIOFiles (VAR f      : FILE;
  25.                       VAR o      : TEXT;
  26.                       VAR name   : ARRAY OF CHAR;
  27.                       VAR outdev : ARRAY OF CHAR);
  28.  
  29. VAR
  30.   ok           : BOOLEAN;
  31.  
  32. BEGIN
  33. ClearScreen;
  34. WriteLn (console);
  35. REPEAT
  36.   PromptFor ('Enter Input File Name: ', name);
  37.   ok := Open (f, name);
  38.   UNTIL ok;
  39.  
  40. PromptFor ('Enter Output Device [DUM:/LST:/FileName]: ', outdev);
  41. CAPS (outdev);
  42. IF outdev <> 'DUM:' THEN
  43.   CreateText (o, outdev);
  44.   END;
  45. END GetIOFiles;
  46.  
  47. PROCEDURE WriteTitle (o : TEXT;
  48.                       p : CARDINAL;
  49.               t : ARRAY OF CHAR);
  50.  
  51. BEGIN
  52. IF p <> 1 THEN
  53.   WriteLn (o);
  54.   END;
  55.  
  56. WriteLn (o);
  57. WriteLn (o);
  58. SetCol (o, 8);
  59. WriteString (o, t);
  60. SetCol (o, 71);
  61. WriteString (o, 'Page');
  62. WriteCard (o, p, 4);
  63. WriteLn (o);
  64. WriteLn (o);
  65. END WriteTitle;
  66.  
  67. PROCEDURE WriteHex (o  : TEXT;
  68.             i  : CHAR);
  69.  
  70. VAR Hex : ARRAY [0..15] OF CHAR;
  71.  
  72. BEGIN
  73. Hex := '0123456789ABCDEF';
  74. WriteChar (o, Hex [ORD (i) DIV 16]);
  75. WriteChar (o, Hex [ORD (i) MOD 16]);
  76. WriteChar (o, ' ');
  77. END WriteHex;
  78.  
  79. PROCEDURE GoToIt (in   : FILE;
  80.                   o    : TEXT;
  81.                   s    : BOOLEAN;
  82.                   p    : CARDINAL;        (*  Page number  *)
  83.                   t    : ARRAY OF CHAR);  (*  Input File Name for Title  *)
  84.  
  85. VAR
  86.   i, j, k, l, n,
  87.   r             : CARDINAL;
  88.   line          : ARRAY [0..80] OF CHAR;
  89.   buf           : ARRAY [0..127] OF CHAR;
  90.  
  91. BEGIN
  92. l := 1;
  93. r := 0;
  94.  
  95. WHILE NOT EOF (in) DO
  96.   n := ReadBytes (in, ADR (buf), 128);
  97.  
  98.   IF (l = 1) THEN
  99.     WriteTitle (console, p, t);
  100.     IF s THEN
  101.       WriteTitle (o, p, t);
  102.       END;
  103.     END;
  104.  
  105.   WriteLn (console); INC (l, 2);
  106.   WriteString (console, 'Record #');
  107.   WriteCard (console, r, 4);
  108.   WriteLn (console);
  109.  
  110.   IF s THEN
  111.     WriteLn (o);
  112.     SetCol (o, 8);
  113.     WriteString (o, 'Record #');
  114.     WriteCard (o, r, 4);
  115.     WriteLn (o);
  116.     END;
  117.  
  118.  
  119.   FOR i := 0 TO 7 DO
  120.     IF s THEN
  121.       SetCol (o, 8);
  122.       END;
  123.     FOR j := 0 TO 15 DO
  124.       k := i * 16 + j;
  125.       IF k <= n THEN
  126.         WriteHex (console, buf [k]);
  127.         IF s THEN
  128.           WriteHex (o, buf [k]);
  129.           END;
  130.         IF j = 7 THEN
  131.           WriteChar (console, ' ');
  132.           IF s THEN
  133.             WriteChar (o, ' ');
  134.             END;
  135.           END;
  136.         END;
  137.       END;
  138.  
  139.     SetCol (console, 62);
  140.     IF s THEN
  141.       SetCol (o, 63)
  142.       END;
  143.  
  144.     FOR j := 0 TO 15 DO
  145.       k := i * 16 + j;
  146.  
  147.       IF k <= n THEN
  148.         IF (buf [k] >= '!') AND (buf [k] <= '_') THEN
  149.           WriteChar (console, buf [k]);
  150.           IF s THEN
  151.             WriteChar (o, buf [k]);
  152.             END;
  153.         ELSE
  154.           WriteChar (console, '.');
  155.           IF s THEN
  156.             WriteChar (o, '.');
  157.             END;
  158.           END;
  159.  
  160.         IF j = 7 THEN
  161.           WriteChar (console, ' ');
  162.           END;
  163.         END;
  164.       END;
  165.  
  166.     WriteLn (console);
  167.     IF s THEN
  168.       WriteLn (o);
  169.       END;
  170.  
  171.     INC (l);
  172.     END;
  173.  
  174.   IF l > PageSize THEN
  175.     INC (p);
  176.     l := 1;
  177.     WriteChar (console, FormFeed);
  178.     IF s THEN
  179.       WriteChar (o, FormFeed);
  180.       END;
  181.     END;
  182.   INC (r);
  183.   END;
  184.  
  185. END GoToIt;
  186.  
  187. PROCEDURE MAIN;
  188.  
  189. VAR
  190.   FileIn           : FILE;
  191.   FileOut          : TEXT;
  192.   PrintSw          : BOOLEAN;
  193.   Title, Name      : ARRAY [0..15] OF CHAR;
  194.   Char             : CHAR;
  195.   PageNum          : CARDINAL;
  196.  
  197. BEGIN
  198. GetIOFiles (FileIn, FileOut, Title, Name);
  199. PageNum := 1;
  200. PrintSw := Name <> 'DUM:';
  201.  
  202. IF Name = 'LST:' THEN
  203.   WriteLn (console);
  204.   WriteString (console, 'Make Printer Ready... Press "Return" to continue. ');
  205.   ReadChar (input, Char);
  206.   END;
  207.  
  208. GoToIt (FileIn, FileOut, PrintSw, PageNum, Title);
  209.  
  210. Close (FileIn);
  211. CloseText (FileOut);
  212. END MAIN;
  213.  
  214.  
  215. BEGIN
  216. MAIN;
  217. END Fdump.
  218.