home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol081 / sysut.tex < prev    next >
Text File  |  1984-04-29  |  8KB  |  177 lines

  1. \ch Printing Utilities
  2. This chapter describes the utility programs PRINT and FF.
  3. Both of these programs assume that the printer is an I.D.S.`460G
  4. "Paper Tiger"; they can easily be adapted to other printers.
  5.  
  6. \se PRINT
  7. \mr sysut
  8. PRINT is used to print files.
  9. It does not alter the line structure of a file by truncating or wrapping
  10. long lines, but it does paginate.
  11. It should not be used for files that are already paginated except with the
  12. "T" option.
  13.  
  14. \pa Invoke PRINT either by typing \bd PRINT \ed or
  15. \bd PRINT filename parameters \ed
  16. If you use the first form, PRINT will first display the parameters that
  17. it accepts, and will then wait for you to enter a file name followed
  18. by parameters.
  19. If you use the second form, PRINT will print the file immediately
  20. without displaying the options.
  21. \pa If you do not give it any parameters, PRINT will print the file
  22. using 12 characters/inch, 6 lines/inch, and 60 lines/page.
  23. You can use parameters to change the format of the printed file;
  24. for example, the command
  25. \bd PRINT MOUSE.TEX B C16 N3 X2 \ed
  26. would print two copies (X2) of the file MOUSE.TEX in boldface type (B), with 
  27. 16 characters/inch (C16), and line numbers of 3 digits (N3).
  28. Here is a complete list of the parameters that PRINT accepts.
  29. A parameter starts with a letter, and some parameters may be followed by
  30. a number or by two numbers.
  31. \sp 2 B \im 20 Boldface characters.  Note that boldface characters are
  32. twice the width of normal characters.  The default is
  33. 'off', that is, normal weight characters.
  34. \sm 0 \sp 2 C <num> \im 20 <num> may be 10, 12, or 16; its value determines 
  35. the pitch (characters/inch) of the printing.  The default value is 
  36. 12 characters/inch.
  37. \sm 0 \sp 2 E <m>,<n> \im 20 Print lines <m> through <n> inclusive from the 
  38. file. The default is to print the entire file.
  39. \sm 0 \sp 2 G <num> \im 20 Set tab positions every <num> columns.  The default
  40. value for <num> is 8, corresponding to the editor's default tab positions.
  41. \sm 0 \sp 2 L <num> \im 20 Set line spacing to <num>/48 inches.  The default
  42. value is <num> = 8, so the line spacing is 1/6 inches.
  43. \sm 0 \sp 2 M <num> \im 20 Set the left margin to <num> columns.  The default
  44. value is <num> = 0, so printing starts as close to the left as possible.
  45. \sm 0 \sp 2 N <num> \im 20 Print a line number of <num> digits at the start of
  46. each line.  If <num> = 0, the default value, line numbers are not printed.
  47. \sm 0 \sp 2 P <num> \im 20 Print <num> lines on each page.  The default value
  48. is <num> = 60.  If you use L to change the line spacing, use P accordingly.
  49. The parameter P0 has a special effect: it inhibits PRINT from transmitting 
  50. form-feeds at all.
  51. \sm 0 \sp 2 T <m>,<n> \im 20 Print pages <m> through <n> of a file which
  52. already contains form-feed characters; for example, a file created by 
  53. TP. 
  54. \sp 2 In this mode, TP calls the assembly language procedure _copy.
  55. For some reason that I have not figured out yet, _copy ignores the
  56. ETX/ACK protocol of the printer.
  57. Consequently the "T" mode does not work on my system.
  58. Any suggestions?
  59. \sm 0 \sp 2 V \im 20 Print with proportional spacing.
  60. The default is even spacing.
  61. \sm 0 \sp 2 X <num> \im 20 Print <num> copies.  The default is <num> = 1.
  62. \sm 0
  63.  
  64. \se FF
  65. This command initializes the printer and may also send form feeds to it.
  66. The command
  67. \bd FF <num> \ed
  68. sends <num> form feeds to the printer, where <num> is a small positive
  69. number.
  70. Use the command
  71. \bd FF 2 \ed
  72. to remove a listing from the printer.
  73. \pa FF always sets the printer to 12 characters/inch, 6 lines/inch,
  74. and fixed space non-bold printing.
  75.  
  76. \ch Pascal Development Utilities
  77.  
  78. This chapter describes the programs PP and XREF.
  79. They are designed to work together, and they make certain assumptions about
  80. the way in which Pascal programs are developed.
  81.  
  82. \se PP
  83. PP pretty-prints Pascal programs; it is a descendent of a program written
  84. by Ledgard et al [SIGPLAN Notices, _12, 7, July 1977, 101-5], but its authors
  85. would probably have difficulty recognizing it in its present form.
  86. The command \bd PP PROG \ed reads a Pascal program from the file PROG.PAS and
  87. writes a pretty-printed version of it to the file PROG.PPP.
  88.  
  89. \pa PP is not idempotent: if you try to pretty-print a file that has
  90. already been pretty-printed, you may find that PP has inserted unnecessary
  91. blanks.
  92. Thus PP assumes the following programming convention: PAS files are
  93. maintained in a compact form with no indentation, several statements
  94. on a line, etc., and the PPP file is used for printing only.
  95.  
  96. \pa PP changes all Pascal reserved words (BEGIN, END, WHILE, etc.)
  97. to upper case.
  98. XREF (described below) cross-references only symbols that begin with a
  99. lower case letter, and it will therefore not cross-reference reserved words 
  100. in files created by PP.
  101.  
  102. \pa PP is a fairly "conservative" pretty-printer in that it gives you a
  103. certain amount of control over the final layout of the program.
  104. It does this not by means of embedded directives, but by retaining
  105. certain features of the input file.
  106. For example, PP will always ensure that a line beginning "PROCEDURE"
  107. is preceded by a blank line; if you always put three blank lines before a
  108. procedure declaration, PP will retain these blank lines.
  109. The same applies to spaces embedded in a line.
  110. Although PP usually tries to put each statement on a separate line,
  111. it is not ruthless about this.
  112. If you write "ELSE`IF`..." on one line, PP will not insert a line break
  113. between "ELSE" and "IF", for example.
  114.  
  115. \pa The best way to understand PP is to look at its controlling loop, a
  116. _WHILE statement at the very end of the program.
  117. PP reads Pascal source and recognizes certain tokens, including some of the
  118. reserved words and some punctuation symbols.
  119. It associates three sets, _selected, _dindsym, and _terminators, with each
  120. special token, and the members of these sets control its actions.
  121. The formatting conventions that it follows can be altered by judiciously
  122. changing entries in the sets.
  123.  
  124. \pa It is important to note that PP does not parse the program in any sense.
  125. This is both a strength and a weakness.
  126. A strength because PP is able to pretty-print programs with syntax errors,
  127. and it can therefore be used to track down errors such as mis-matched
  128. \nu /
  129. _BEGIN/END pairs.
  130. A weakness because there are certain situations which it cannot easily be made
  131. to recognize: the most important of these is an _ELSE clause in a _CASE
  132. statement.` (Why didn't Intersystems use _OTHERWISE like everybody else?)
  133.  
  134. \se XREF
  135. XREF is a program that cross-references Pascal programs that have been
  136. pretty-printed.
  137. The command
  138. /bd XREF PROG /ed
  139. causes XREF to read from the file PROG.PPP and write to a new file
  140. called PROG.XRT. 
  141. \pa XREF does not cross-reference symbols inside comments of the form
  142. "{`...`}", symbols inside quoted strings, or symbols that do not start
  143. with a lower case letter.
  144. It does not write a listing of the program being cross-referenced,
  145. but the line numbers that it prints in the cross-reference table are
  146. consistent with those produced by PRINT.
  147. You can use the following submit file, called PP.SUB, to pretty-print 
  148. and cross-reference a Pascal program, print the results, 
  149. and delete the temporary files:
  150. \bd \rb
  151. PP $1
  152. XREF $1
  153. PRINT $1.PPP N4
  154. PRINT $1.XRT
  155. ERA $1.PPP
  156. ERA $1.XRT
  157. \ed \sb
  158. Note that the parameter $1 must not be given an extension.
  159. For example:
  160. \bd SUBMIT PP MYPROG \ed
  161.  
  162. \pa XREF uses 26 binary trees to store user identifiers.
  163. The first letter of an identifier determines the tree in which it will
  164. be stored.
  165. An entry in the tree consists of the identifier, a pointer to a list of
  166. line numbers, and pointers to left and right subtrees.
  167. Line numbers are pushed onto the list as the program is scanned,
  168. and the list is reversed prior to printing.
  169.  
  170. \pa The problem thta is most likely to beset XREF is memory space.
  171. It uses the assembly language function _space to check available memory
  172. before making each entry and it will stop scanning and print the report
  173. if the amount of available memory falls below 100 bytes.
  174. This has not actually happened so far; XREF seems to be capable of
  175. cross-referencing Pascal programs of several thousand lines while
  176. running in 58K.
  177.