home *** CD-ROM | disk | FTP | other *** search
/ Frostbyte's 1980s DOS Shareware Collection / floppyshareware.zip / floppyshareware / USCX / SAMPLE02.ZIP / FINISHTX.BAS < prev    next >
BASIC Source File  |  1982-06-25  |  24KB  |  445 lines

  1. 10 '$#0
  2. 20 '.pf8.ce"finish"
  3. 30 '.pf0.cea formatting printer
  4. 40 '.cefor the IBM Personal Computer
  5. 50 '.ceand  the EPSON MX-80
  6. 60 '.bl1.ceby Paul F. Doering
  7. 70 '.bl3.pf6
  8. 80 'Introduction
  9. 90 '.pf0.in5
  10. 100 'In the August 1978 issue of KILOBAUD (now MICROCOMPUTING) there appeared
  11. 110 'the full listing of a program its authors called "DOCUFORM". It marked
  12. 120 'the first time that anyone had put a complex text-formatting program
  13. 130 'into the public domain, and it led to a host of look-alikes on a wide
  14. 140 'variety of personal computers. Today its descendents form the nuclei of
  15. 150 'several word processors being sold for hundreds of dollars. My version,
  16. 160 'heavily modified and extended, is called "finish". Because it is based on
  17. 170 'work given freely by its originators, I have maintained that spirit and
  18. 180 'have elected to distribute "finish" without charge. There is a corollary,
  19. 190 'of course: "finish" comes to you without any guarantees. I will not
  20. 200 'promise that it will work under new circumstances. I will not send you
  21. 210 'updates. I will not fix bugs in your copy. All I will say now is that
  22. 220 'this documentation has been prepared using "finish"; to this extent it is
  23. 230 'functional. Have fun with it. It's yours without restriction.
  24. 240 '.bl2.pf6.tp4
  25. 250 'The files on your diskette
  26. 260 '.pf0.in5
  27. 270 '"finish" expects to run in a single-drive, single-sided, double-density environment. You can
  28. 280 'modify it by yourself. Frankly, I don't feel it's
  29. 290 'worth the bother. Put the diskette into drive A and run a directory listing.
  30. 300 'You'll find these files.
  31. 310 '.bl1.tp4.ma5
  32. 320 '*  finish.bas - This is the program itself, saved in ASCII (untokenized)
  33. 330 'format for reasons not germane to this discussion. This file is heavily
  34. 340 'and cogently commented. Reading it will give you a lot of insight into
  35. 350 'both "finish" and BASIC programming in general.
  36. 360 '.bl1.tp4
  37. 370 '*  finishtx.bas - This is the raw text file for the documentation you are
  38. 380 'now reading. It is instructive to compare a straight dump of this file
  39. 390 'with the formatted material "finish" produces from it. That comparison is
  40. 400 'a good introduction to the principles of imbedded commands, the form of
  41. 410 'command "finish" uses to implement your wishes.
  42. 411 '.bl1.tp4
  43. 412 '*  labels.bas - a little worksaver to which "finish" chains when it is done.
  44. 413 '"labels" will produce an altered set of soft labels for the function keys,
  45. 414 'a set that I find more useful than IBM's choice. You can change it; but
  46. 415 'there has to be such a program, or the chain will fail as "finish" exits.
  47. 420 '.bl1.tp4.ma0.in5
  48. 430 'What you will NOT find on your diskette is a program to capture the text to
  49. 440 'be processed later by "finish". There used to be such a program, called
  50. 450 '"keyin". It was so simple that it turned out to be scant help, so I
  51. 460 'scuttled it. I have found that I can create text files for "finish" without
  52. 470 'the nuisance of a text-capture program's getting in my way. Maybe you'll
  53. 480 'disagree and choose to write one. Good luck.
  54. 490 '.bl1.tp2.in5
  55. 500 'Also mysteriously missing is any kind of an editing program. There's a
  56. 510 'good reason for that. Your PC comes with a full-screen editor as a part of
  57. 520 'the BASIC interpreter. Why go to the trouble of writing another one?
  58. 530 '.bl2.pf6.tp4
  59. 540 'The basic principles of "finish"
  60. 550 '.pf0.in5
  61. 560 'The raw text that "finish" processes is actually a BASIC program that
  62. 570 'consists entirely of REMARK statements. Therefore, every line in your raw
  63. 580 'text file must begin with a unique line number; and these numbers determine
  64. 590 'the actual sequence of the lines in the final documents, just as they do in
  65. 600 'BASIC. In the IBM PC, a REMARK statement is indicated by the presence of an
  66. 610 'apostrophe following the line number. We have to follow that rule, too; and
  67. 620 'you can take my word that your most frequent mistake will be forgetting to
  68. 630 'include the apostrophe.
  69. 640 '.bl1.tp2.in5
  70. 650 'Now you know why file "finishtx.bas" looks as it does. You also know how to
  71. 660 'create a file of raw text for "finish" to process. You just start every
  72. 670 'line with a line number in increasing sequence, follow it with an
  73. 680 'apostrophe, and then enter a line of your intended material. Like any BASIC
  74. 690 'line, your text line can have up to 255 characters, including the number
  75. 700 'and apostrophe. Personally, I find it easier to read my raw text if I limit
  76. 710 'each line's length to the 80-character width of the screen. That's pretty
  77. 720 'much the convention in "finishtx.bas".
  78. 730 '.bl1.tp2.in5
  79. 740 'When you have completed the raw text file, just save it on diskette by
  80. 750 'using the command
  81. 760 '.bl1.nf
  82. 770 '     save"textname",a
  83. 780 '.bl1.fi
  84. 790 'The use of the ",a" modifier when saving the file to diskette is crucial.
  85. 800 '"finish" can only process files saved in ASCII format, and the ",a" is
  86. 810 'BASIC's cue to use ASCII instead of the default tokenized format. If you
  87. 820 'ever get weird results when asking "finish" to process a file, check to see
  88. 830 'with a PC-DOS "type" command whether the file is in ASCII. I'll bet it
  89. 840 'won't be.
  90. 850 '.bl1.tp2.in5
  91. 860 'Incidentally, the raw text will be accumulating in RAM as you enter it in
  92. 870 'the form of a peculiar BASIC program. It is good practice to save it onto
  93. 880 'the diskette from time to time as it grows larger, guarding yourself
  94. 890 'against the disaster of losing the whole job if something goes wrong.
  95. 900 '.bl1.tp2.in5
  96. 910 'You can see, then, that there are three steps in going from no text at all
  97. 920 'to having a finished, printed document.
  98. 930 '.bl1.tp4.ma5
  99. 940 '1. Using the apostrophe convention for a REMARK statement, create the raw
  100. 950 'text of your document in the form of a sequentially numbered set of lines.
  101. 960 'Because you are writing a kind of BASIC program, you have the full power
  102. 970 'of the BASIC editor available.
  103. 980 '.bl1.tp2
  104. 990 '2. Save the file of raw text on diskette, using the BASIC "save" command
  105. 1000 'and the ",a" option to force a file in ASCII format. To save a file
  106. 1010 'named, say, "FRED", you would use the command
  107. 1020 '.nf.bl1
  108. 1021 '     save"fred",a
  109. 1030 '.fi.bl1.tp2
  110. 1040 '3. Run the program "finish" as explained below, specifying the name of the
  111. 1050 'file of raw text to be processed.
  112. 1060 '.bl1.tp2.ma0.in5
  113. 1070 'If the document turns out to have mistypings in it, you can return to step
  114. 1080 '1, using the BASIC editor in the normal fashion to correct the file. If
  115. 1090 'the only problem is the format of the document, as opposed to its content,
  116. 1100 'you can make runtime format changes in using "finish" and will not have
  117. 1110 'to alter the text file. Only step 3 need be repeated.
  118. 1120 '.bl2.pf6.tp4
  119. 1130 'Running "finish"
  120. 1140 '.pf0.in5
  121. 1150 '"finish" is easy to run. Get into BASIC and type
  122. 1160 '.nf.bl1
  123. 1170 '     run"finish
  124. 1180 '.fi.bl1.tp2
  125. 1190 'There will be some diskette action, followed by a few seconds of blank
  126. 1200 'screen, after which a full screen of instructions will appear. There will
  127. 1210 'also be a new set of soft labels on the 25th screen line. These refer to
  128. 1220 'the actions of the ten function keys, F1 - F10. Read the instructions.
  129. 1230 'Note especially that you will be unsuccessful in getting printed output
  130. 1240 'if you fail to hit F7 and type in a file name (like "fred") before you
  131. 1250 'hit F10, the "Begin" key.
  132. 1260 '.bl1.tp2.in5
  133. 1270 'The actions of those function keys deserve some discussion.
  134. 1280 'F1 sets the absolute left margin for the printed text. F2 does the same
  135. 1290 'for the right. By "absolute" I mean that all adjustments to the margin
  136. 1300 'settings by any imbedded commands (see below) will be RELATIVE to the
  137. 1310 'runtime values set with F1 and F2. Default values are 3 and 72. Margins
  138. 1320 'are set in terms of tenths of inches from the "1" position on the
  139. 1330 'printer. These tenths of inches also correspond to the embossed numbers
  140. 1340 'on the printer's metal paper bail. Even if you use compressed characters
  141. 1350 'at 17 to the inch, these margin settings will still be in tenths of
  142. 1360 'inches and will still align with the paper bail.
  143. 1370 '.bl1.tp2.in5
  144. 1380 'F3 is a toggle. It switches back and forth between 10 characters per inch
  145. 1390 'and 17 cpi. That means that at runtime you can select compressed or normal
  146. 1400 'fonts. Notice that any toggling key always shows on its soft label what
  147. 1410 'will happen the next time it's hit, not what the current state of its
  148. 1420 'parameter is. F3's label starts out saying "17 cpi", but "finish" is set
  149. 1430 'at that stage to print at 10 cpi. If you hit F3, "finish" will set itself
  150. 1440 'for 17 cpi, and the new soft label for F3 will say "10 cpi". If you find
  151. 1450 'yourself confused, just hit F9 for a complete status report.
  152. 1460 '.bl1.tp2.in5
  153. 1470 'F4 toggles between two fonts: "pretty" and "plain", corresponding to
  154. 1480 'the printer's emphasized and normal typeface, respectively. "Plain" runs
  155. 1490 'faster and is useful for drafts. "Pretty" makes a nicer looking final
  156. 1500 'copy. There is an interlock between F3 and F4. The "pretty" font can only
  157. 1510 'exist at 10 cpi, and "finish" will not allow otherwise.
  158. 1520 '.bl1.tp2.in5
  159. 1530 'F5 toggles the justification of the right margin between fully justified
  160. 1540 'and ragged. Unless you specify a peculiar left margin justification by an
  161. 1550 'imbedded command in the raw text, the left marging is always justified.
  162. 1560 '.bl1.tp2.in5
  163. 1561 'F6 toggles between single-spaced lines of text and double-spaced.
  164. 1562 '.bl1.tp2.in5
  165. 1570 'F7 allows you to specify the file name of the raw text. This is mandatory.
  166. 1580 'Enter only the name, not the ".bas" extension. You do not have to specify
  167. 1590 'a diskette drive, since the program expects everything to be on drive A.
  168. 1600 'Nevertheless, you can prefix a "b:" to the file name and it will be
  169. 1610 'honored.
  170. 1620 '.bl1.tp2.in5
  171. 1630 'F8 lets you specify a header, text to be written right-justified with the
  172. 1640 'page number at the top of pages two and beyond. If you choose to not
  173. 1650 'supply a header, the page number will not be typed either.
  174. 1660 '.bl1.tp2.in5
  175. 1670 'F9 is the "Review" key. Whenever the blinking cursor is at the left side
  176. 1680 'of the screen, awaiting the striking of a function key, you may hit F9
  177. 1690 'to get a display of the existing values of the runtime parameters. Until
  178. 1700 'you get the hang of using the toggling keys, it's a good idea to take a
  179. 1710 'reading with F9 occasionally.
  180. 1720 '.bl1.tp2.in5
  181. 1730 'F10 is the key you hit when you're ready to start the printing. "finish"
  182. 1740 'will conduct a few plausibility tests on the runtime parameters and will
  183. 1750 'announce that it can't start printing and why, should it find an
  184. 1760 'inconsistency. Accept its criticism without rancor, and correct the
  185. 1770 'situation. When you think all is well, hit F10 again.
  186. 1780 '.bl1.tp2.in5
  187. 1790 'The display will pose a question about what text you wish to substitute
  188. 1800 'for a thing called dollar/number 0. This is as good a place to talk about the dollar/number
  189. 1810 'codes as any; but there is a logistical problem to be cleared up first.
  190. 1812 'In this documentation I am forced to use the term "dollar/number" when I
  191. 1814 'really mean the pair of characters produced as shifted-4 and shifted-3,
  192. 1816 'respectively. The problem is that I can't actually type those two
  193. 1818 'characters, because "finish" will regard them as a substitution request;
  194. 1819 'and I don't really want one. Read on; you'll see what I mean....
  195. 1820 '.bl2.pf6.tp4
  196. 1830 'The substitution-string codes
  197. 1840 '.pf0.in5
  198. 1850 'There are times when you want to prepare a document for general use under
  199. 1860 'more than one circumstance. A form letter is an example. The substitution-
  200. 1870 'string codes are place markers that let you tell "finish" that here is a
  201. 1880 'place where you wish to insert some text (like an addressee's name) that
  202. 1890 'was indeterminate at composing time. You may use up to ten such codes.
  203. 1900 'They are designated by the character grouping dollar/number 0 through dollar/number 9. For
  204. 1910 'example, you might begin a form letter with
  205. 1920 '.bl1.nf
  206. 1930 '     Dear dollar/number 1,
  207. 1940 '.bl1.fi
  208. 1950 'At runtime you would respond to the display inquiry about what you wanted
  209. 1960 'to substitute in the place of dollar/number 1 by entering, say, Hilda. At that part
  210. 1970 'of the letter, the printer would put out
  211. 1980 '.bl1.nf.tp3
  212. 1990 '     Dear Hilda,
  213. 2000 '.bl1.fi
  214. 2010 'having substituted "Hilda" for the dollar/number 1 between the space and the comma.
  215. 2020 '.bl1.tp2.in5
  216. 2030 'Since there is no conceptual limitation on the nature of the string you
  217. 2040 'substitute at runtime, you may also replace a dollar/number with one or more imbedded
  218. 2050 'commands. There's no law that says a substitute string has to show up in
  219. 2060 'the document as so many words. I think that this is enough on that subject.
  220. 2070 'You'll learn most about the dollar/number codes by playing with them. I generally put
  221. 2080 'dollar/number 0 as the complete content of the first line of my raw text, so I can
  222. 2090 'decide at runtime whether there are any last-minute commands I want to
  223. 2100 'imbed. Remember that "finish" will respond to your hitting F10, the "Begin"
  224. 2110 'key, by asking what (if any) strings you want to substitute for the
  225. 2120 'occurrence of the dollar/number codes, should they be encountered later in the raw
  226. 2130 'text.
  227. 2140 '.bl1.tp2.in5
  228. 2150 'You should not skip any integers in the sequence from 0 to 9 for the
  229. 2160 'dollar/number codes. Begin with 0 and go as high as you must without
  230. 2170 'leaving any out.
  231. 2180 '.bl1.tp2.in5
  232. 2190 'PHEW! Now let's get back to what happens when you hit the F10 key and the
  233. 2200 'program begins its execution. If you have used any dollar/number codes,
  234. 2210 'you can indicate what you want them to stand for in this one printing. They
  235. 2220 'can stand for something else during the next printing. Hitting the "enter"
  236. 2230 'key without specifying a substitute string terminates "finish"'s inquiries
  237. 2240 'on that subject and gets you on to other things.
  238. 2250 '.bl1.tp2.in5
  239. 2260 '"finish" next asks you to choose output to the screen or the printer. You
  240. 2270 'can't have both at once. Make a choice by hitting s or p.
  241. 2280 '.bl1.tp2.in5
  242. 2290 '"finish" will ask whether you want to print the whole document or just a
  243. 2300 'partial set of pages. Most of the time you'll want the whole thing; but
  244. 2310 'there'll be times when there's an error on just one page in the middle,
  245. 2320 'and then you'll be glad for this feature.
  246. 2330 '.bl1.tp2.in5
  247. 2340 'That's it. If the printer is turned on, you'll get your document.
  248. 2350 'When "finish" is done, it will ask whether you want to make another copy
  249. 2360 'with the same dollar/number substitutions. You answer y or n. Guess what
  250. 2370 'happens....
  251. 2400 '.bl2.tp4.pf6
  252. 2401 'Using imbedded commands to control format
  253. 2402 '.pf0.in5
  254. 2450 'There are two ways to instruct "finish" concerning the appearance of
  255. 2460 'the printed results. The first way is the use of the function keys to set
  256. 2470 'up runtime specifications on margin placement, font size and elegance, edge
  257. 2480 'alignment, line spacing, and header content. You have the power to set these
  258. 2490 'parameters before any printing occurs.
  259. 2500 '.bl1.tp2.in5
  260. 2510 'The other way is to insert the instructions for "finish" directly into
  261. 2520 'the body of the text itself. Provided that there is a way for "finish" to
  262. 2530 'identify these instructions and to distinguish them from the material being
  263. 2540 'printed, this scheme can be quite powerful. These imbedded
  264. 2550 'commands, as they are called, can be placed in the flow of text with great
  265. 2560 'precision, so as to affect the formatting of a very specific section.
  266. 2570 '.bl1.tp2.in5
  267. 2580 'You can envision the parameters settable with the function keys as being
  268. 2590 'a kind of framework for the formatting process, a set of default conditions that
  269. 2600 'apply in the absence of counter-instructions buried in the text. In general,
  270. 2610 'any imbedded command has precedence over any runtime specification. For
  271. 2620 'example, the imbedded command to begin double line spacing overrides your
  272. 2630 'runtime choice from function key 6, the "single/double" key.
  273. 2640 '.bl1.tp2.in5
  274. 2650 'There is one pair of runtime parameters that will remain in effect
  275. 2660 'irrespective of the occurrence of their imbedded counterparts. The left-
  276. 2670 'margin and right-margin values from the function keys become absolute.
  277. 2680 'All margin adjustments made with imbedded commands are understood to be
  278. 2690 'relative to the runtime values. If you use function key 1 to set the runtime
  279. 2700 'left margin at 15, then any imbedded command later setting it to 5 will be
  280. 2710 'taken to mean "5 with respect to 15", for an actual margin setting of 20 on
  281. 2720 'the physical page.
  282. 2730 '.bl1.tp2.in5
  283. 2740 'To help "finish" identify an imbedded command, we adhere to a brief set
  284. 2750 'of rules governing their form and placement in the text.
  285. 2760 '.bl1.tp2.in5
  286. 2770 'Imbedded commands may occur alone or in chains, but they must always
  287. 2780 'start at the left end on a line typed in from the keyboard. The term "imbedded"
  288. 2790 'alludes to the commands' being within the body of the text as a whole, not to
  289. 2800 'their being allowed to appear at random within any given entered line of that
  290. 2810 'text.
  291. 2820 '.bl1.tp2.in5
  292. 2830 'An imbedded command consists of three characters: a period and two
  293. 2840 'lower-case alphabetic characters. This trio may sometimes be followed by an
  294. 2850 'integer or a string of textual material as an argument, if permitted by the
  295. 2860 'rules outlined in the next section.
  296. 2870 '.bl1.tp2.in5
  297. 2880 'An example of an imbedded command that takes no argument is
  298. 2890 '.ce.wt
  299. 2900 'which is the command Wait at Top, forcing "finish" to stop printing at the top
  300. 2910 'of all subsequent pages, presumably because you want to align the
  301. 2920 'paper manually before printing begins on the new sheet.
  302. 2930 '.bl1.tp2.in5
  303. 2940 'An example of a command that takes an integer as an argument is
  304. 2950 '.ce.lm5
  305. 2960 'which is the command mentioned above to move the left margin inward five
  306. 2970 'columns with respect to the physical absolute left margin set at runtime with
  307. 2980 'function key 1.
  308. 2990 '.bl1.tp2.in5
  309. 3000 'An example of a command that takes a string of text as an argument is
  310. 3010 '.ce.ceTitle
  311. 3020 'which is the command to center between the effective margins whatever textual
  312. 3030 'material occurs from immediately after the .ce command to the next carriage
  313. 3040 'return. In this example, the word   Title   would be centered.
  314. 3050 '.bl1.tp2.in5
  315. 3060 'In the examples just cited the commands are shown in the center of the
  316. 3070 'page to set them apart for emphasis. Remember that when they are imbedded in
  317. 3080 'the text, you must type them at the start of a new line. You may not even
  318. 3090 'type an innocent space-character first on that line.
  319. 3100 '.bl1.tp2.in5
  320. 3110 'In the following definitions and explanations, the symbol # will denote
  321. 3120 'an integer and XXXX will denote a string of text.
  322. 3150 '.bl2.tp9.pf6
  323. 3160 'Definitions of the imbedded commands
  324. 3170 '.pf0.bl3
  325. 3180 'Commands that control margin placement --
  326. 3190 '.bl2.tp2
  327. 3200 'Set the number of blank lines at the top of the page            .tm#
  328. 3210 '.in3
  329. 3220 'The default value is zero. Printing will begin at top-of-form.
  330. 3230 '.bl1.tp3
  331. 3240 'Set the number of blank lines at the bottom of the page         .bm#
  332. 3250 '.in3
  333. 3260 'Default is 12. Taken together, these two default values will
  334. 3270 '.in3
  335. 3280 'leave a 12-line gap across the page perforations.
  336. 3290 '.bl1.tp2
  337. 3300 'Set the left margin at a chosen column                          .lm#
  338. 3310 '.in3
  339. 3320 'Default is zero; i.e. the runtime margin.
  340. 3330 '.bl1.tp2
  341. 3340 'Set the right margin at a chosen column                         .rm#
  342. 3350 '.in3
  343. 3360 'Default is zero; i.e. the runtime margin.
  344. 3370 '.bl1.tp2
  345. 3380 'Set the number of lines on a physical page                      .pl#
  346. 3390 '.in3
  347. 3400 'Default is 66, the length of an 8 1/2 by 11" sheet.
  348. 3410 '.bl1.tp2
  349. 3420 'Adjust both margins in (+) or out(-) by the same amount         .ma#
  350. 3430 '.in3
  351. 3440 'Default is zero; .ma0 restores the runtime margins.
  352. 3450 '.bl1.tp2
  353. 3460 'Move all printing rightward (+) or leftward (-)                 .ov#
  354. 3470 '.bl2.tp10
  355. 3480 'Commands that format the text --
  356. 3490 '.bl2.tp2
  357. 3500 'Insert blank lines                                              .bl#
  358. 3510 '.in3
  359. 3520 'Must be >0. Usually used as .bl1 between paragraphs.
  360. 3530 '.bl1.tp2
  361. 3540 'Indent at the start of a line                                   .in#
  362. 3550 '.in3
  363. 3560 'Essentially a versatile tab command.
  364. 3570 '.bl1.tp2
  365. 3580 'Justify left edge of text aligned (right edge ragged)           .jl
  366. 3590 '.in3
  367. 3600 'This is the default condition, like most typing.
  368. 3610 '.bl1.tp2
  369. 3620 'Justify right edge aligned (left edge ragged)                   .jr
  370. 3630 '.in3
  371. 3640 'Seldom used. Find a use and win a prize.
  372. 3650 '.bl1.tp2
  373. 3660 'Justify both edges aligned                                      .jb
  374. 3670 '.in3
  375. 3680 'This lengthens the line by extra spaces between words.
  376. 3690 '.bl1.tp2
  377. 3700 'Set single- (#=1) or double- (#=2) line spacing                 .ls#
  378. 3710 '.in3
  379. 3720 'Any # not 2 will be reset to 1, which is the default.
  380. 3730 '.bl1.tp2
  381. 3740 'Center the following text between the current margins           .ceXXXX
  382. 3750 '.in3
  383. 3760 'It's up to you to see that it fits!
  384. 3770 '.bl1.tp2
  385. 3780 'Fill the current line with text from the next one if possible   .fi
  386. 3790 '.in3
  387. 3800 'This is normal operation, the default condition.
  388. 3810 '.bl1.tp2
  389. 3820 'No filling. Add no text to this line from the following one     .nf
  390. 3830 '.in3
  391. 3840 'This is useful for inside addresses in letters.
  392. 3850 '.bl2.tp10
  393. 3860 'Commands related to paging
  394. 3870 '.bl2.tp2
  395. 3880 'Immediately start a new page                                    .pa
  396. 3890 '.in3
  397. 3900 'Continuous page numbering is maintained.
  398. 3910 '.bl1.tp2
  399. 3920 'Immediately start a new page                                    .pa#
  400. 3930 '.in3
  401. 3940 'Assign # as the number of the new page.
  402. 3950 '.bl1.tp2
  403. 3960 'Wait at the top of each successive new page                     .wt
  404. 3970 '.in3
  405. 3980 'This allows paper alignment before printing.
  406. 3990 '.bl1.tp3
  407. 4000 'Test if there's enough room at the bottom of this page          .tp#
  408. 4010 '.in3
  409. 4020 'Start a new page unless there are at least # remaining lines
  410. 4030 '.in3
  411. 4040 'on the current page. Useful for keeping charts & tables intact.
  412. 4050 '.bl1.tp3
  413. 4060 'Define a header                                                 .hdXXXX
  414. 4070 '.in3
  415. 4080 'The string of text and the page number will print at the top
  416. 4090 '.in3
  417. 4100 'of the following pages until superseded by another .hd command.
  418. 4110 '.bl2.tp8
  419. 4120 'Commands to select an printer font
  420. 4130 '.bl2.tp5
  421. 4140 'Select a printer font                                           .pf#
  422. 4150 '.in3
  423. 4160 'The new font applies to a full line. No mixing of fonts on
  424. 4170 '.in3
  425. 4180 'a single line is possible.
  426. 4190 '.bl2.tp12
  427. 4200 '.pf1
  428. 4210 'This is a sample of the font you get when you use .pf1
  429. 4220 '.pf2
  430. 4230 'This is a sample of the font you get when you use .pf2
  431. 4240 '.pf3
  432. 4250 'This is a sample of the font you get when you use .pf3
  433. 4260 '.pf4
  434. 4270 'This is a sample of the font you get when you use .pf4
  435. 4280 '.pf5
  436. 4290 'This is a sample of the font you get when you use .pf5
  437. 4300 '.pf6
  438. 4310 'This is a sample of the font you get when you use .pf6
  439. 4311 '.pf7
  440. 4312 'This is the font from .pf7
  441. 4313 '.pf8
  442. 4314 'This is the font from .pf8
  443. 4320 '.pf0.bl1.tp2
  444. 4330 'Using .pf0 restores the font chosen at runtime, "plain" or "pretty"
  445. 14