# % PAGINATE.TXT -- documentation for the PAGINATE command # % Please reformat using "PAGINATE PAGINATE.TXT PAGINATE.DOC /OVERWRITE /-I" # % (There's a batch file--PAGDOCS.BAT--that does this for you) # page=60 # adjust # title PAGINATE.DOC ^B Revised: ^A # end # justify length 80 # index "END" "(See FOOTER)" DUMMY # index "END" "(See HEADER)" DUMMY # index "END" "(See MULTICOLUMN)" DUMMY # index "END" "(See TITLE)" DUMMY # index "END" "(See UNIT)" DUMMY # index "Error messages" "(See also /DEBUG parameter)" DUMMY # index "Environmental variable" "(See SET PAGINATE)" DUMMY # index "PAGINATE.INI" "(See INI File)" DUMMY # index "Printer" "(See RESET=string)" DUMMY # index "Printer" "(See SETUP=string)" DUMMY # index "INDEX" "(See INCLUDE INDEX)" DUMMY # index "Length" "Of line" "(See LENGTH command)" DUMMY # index "Length" "Of page" "(See PAGE command)" DUMMY # index "Missing data values" "(see INMISS=val)" DUMMY # index "Missing data values" "(see INMISSC=val)" DUMMY # index "Missing data values" "(see OUTMISS=val)" DUMMY # index "Missing data values" "(see OUTMISSC=val)" DUMMY # index "Sorting" "Case-insensitive" "(See SORTI=varspec)" DUMMY # index "Sorting" "Descending" "(See SORTD=varspec)" DUMMY # index "SPACING=1" "(see also SINGLE)" DUMMY # index "SPACING=2" "(see also DOUBLE)" DUMMY # index "SPACING=3" "(see also TRIPLE)" DUMMY # index "Widow lines" "(see ADJUST)" DUMMY # index "Overview" The PAGINATE.EXE program formats text files containing embedded "marker" commands. Specifically, the program can be used to: # unit # indent 4-2 * Align, justify, center text * Add headers and footers to pages * Add page breaks * Control indentation * Control spacing * Sort the file (alphabetically, not numerically all that well) in either ascending or descending order. * Generate indexes * Select fields to print * Print out dBase and ASCII-delimited files in tabular forms * Bring ASCII-delimited and dBase files into existing text # end # index "National Institutes of Health" The PAGINATE.EXE program is based on a document-formatting language that exists on the mainframe computers at the National Institutes of Health in Bethesda, MD. The text editor used there is called WYLBUR and it does all sorts of wonderful things like creating programs. For documentation, you use the WYLBUR text editor and insert document formatting codes. These codes determine things like margins, indentation, justification, spacing, etc. After you embed all of these formatting commands, you issue a PAGINATE command and everything's reformatted for you. PAGINATE includes many of the WYLBUR pagination commands and then adds a number or database operations. See the notes at the end for how PAGINATE.EXE differs from my other MULTICOL.EXE program. Typically, I do most of my text formatting using the PE2 text editor which I dearly love. The main drags about using PE2 for text formatting are that: # unit # indent 4-2 * It doesn't do titles and footers * It adds a space after every period followed by a space so "12 p.m. at the store" comes out as "12 p.m. at the store" * It doesn't handle the database functions (multicolumn printing, dBase, ASCII-delimited, and sorting) that I plan to add to PAGINATE. * It isn't sold anymore and I always hated PE3 after becoming an unwitting beta tester for them. (Sorry guys but the free pen you gave me just didn't make up for the fact that it still didn't work right and I don't like paying to become a beta tester.) # end # # index "Marker commands" Marker commands: PAGINATE typically expects document formatting codes to be embedded in the text document itself. If you want the same formating to be used through the entire document, however, you can pass in most of the arguments (see the "Syntax" discussion below) or use a separate control file instead. The formatting codes are preceded by a "marker" character. This is a character which begins in column 1 of the text (or control) file and is typically the character "#". (When passing in the formatting codes, all codes are preceded by a "/".) For example, you might have text like this: # unit # verbatim #align length 20 This is some sample text which you have asked to align. The margins will be placed at 1 and 20. You can use an indent command to shift the left margin if desired. # end This example shows one marker statement ("#align length 20") which contains two formatting commands: "align" and "length 20". Formatting commands are keyword specific. You can put in commands on the same line which have no logical bearing to one another like "#align spacing=2". Exceptions: * Do not do this for INCLUDE statements * Do not do this for INDEX statement # index "Semi-colons" Formatting commands can be separated by semi-colons for clarity but only a space is required. The case of the marker statement is irrelevant. After the PAGINATE command is run, the above text will come out like this: # unit # verbatim This is some sample text which you have asked to align. The margins will be placed at 1 and 20. You can use an indent command to shift the left margin if desired. # end # index "Paragraphs" In terms of alignment, justification, variable indentation, etc, the system treats each paragraph as a separate entity. A paragraph is defined as beginning with a blank line or a space. For example: # unit # verbatim #justify length 25 This is one paragraph And this is another paragraph. But this is the same paragraph. New paragraph here. # end Comes out as this: # unit # verbatim This is one paragraph And this is another paragraph. But this is the same paragraph. New paragraph here. # end # index "Range of formatting" Formatting commands cover a variety of functions. Note that formatting within titles, footers, headers, and UNIT...END blocks does not affect formatting beyond the END statement. For example, the length of the title below does not affect the length outside the title: # unit # verbatim # align length 50 This text is aligned length 50. Here comes a title. # title center length 70 This title is centered within length 70. # end This text (outside the TITLE ... END block) is still being aligned (not centered) to length 50 (not 70). # end # index "Short lines" # index "Paragraphs" "One liners" Note that JUSTIFY and ALIGN do not affect lines which are on their own and do not continue to a second line and do not exceed the given page length. As an example, note that the file names shown in the next section ("Sample files:") are not affected even though they are actually controlled by a JUSTIFY marker command. This may seem like an error at times especially if you've already indented text; remember that indentation is the system's clue that there is a new paragraph so pre-indented text won't be affected much by the program. This feature is, by the way, frequently useful in defining oddly formatted sections of text without needing to use a "# UNIT VERBATIM" statement around it; just make sure each line begins with at least one space and the program won't touch it. # index "Sample files" Sample files: An example input file and its related components are included in this ZIP under PAGDEMO.*. You can modify this and see how features are affected. The demonstration files are as follows: # % As is documented above, the following lines don't need a VERBATIM # % marker because they are short enough to not be affected by the JUSTIFY # % marker command. PAGDEMO.BAT Batch file that actually runs the demo file PAGDEMO.#1 The primary file for the demo PAGDEMO.#1D The ASCII-delimited file brought in for the demo PAGDEMO.#1C The field-definition file used for the demo # index "Formatting commands" Formatting-related commands: # index "Equal signs" The following section describes the formatting commands alphabetically with some cross-referencing. The commands are case insensitive ("align" and "ALIGN" are the same). Typically, the equal signs are optional ("LENGTH=80" is the same as "LENGTH 80") except when used from the DOS command line. Remember, the text line that these commands appear in must begin with the designated marker character (typically a "#"). # index "Formatting commands" "Default values" Default initial values (format commands): INDENT=0 LENGTH=80 MARKER=# PAGE=60 PAGEEJECT SINGLE VERBATIM # index "Formatting commands" "% (comments)" # index "% (comments)" %: Comments. You can add comments after any marker command or you can embed them as marker commands all on their own. # index "Formatting commands" "ADJUST" # index "ADJUST" ADJUST: Tells the system to not write single lines on the bottom of a page. This is typically done to control "widow lines", cases where the first line of a paragraph prints on the bottom of one page and the remainder of the paragraph prints on the top of the next. # index "Formatting commands" "-ADJUST" # index "-ADJUST" -ADJUST: Says that "widow lines" are okay. # index "Formatting commands" "ALIGN" # index "ALIGN" ALIGN: Aligns text (uneven right margins) according to the default page width. See also: CENTER, JUSTIFY, RIGHT, and VERBATIM. # index "Formatting commands" "-ALIGN" # index "-ALIGN" -ALIGN: Same thing as VERBATIM. # index "Formatting commands" "CENTER" # index "CENTER" CENTER: Centers text according to the default page width. See also: ALIGN, JUSTIFY, LENGTH, RIGHT, and VERBATIM. # index "Formatting commands" "-CENTER" # index "-CENTER" -CENTER: Same thing as VERBATIM. # index "Formatting commands" "DOUBLE" # index "DOUBLE" DOUBLE: Double-spaces all text. See also: SINGLE, SPACING=n, and TRIPLE. # index "Formatting commands" "EJECT" # index "EJECT" # index "Page-eject characters" EJECT: Causes a new page to be created. A regular decimal 12 character (the female symbol) is also treated as a page eject as long as it appears by itself on a line. See also: PAGEEJECT and PAGEFILL. # index "Formatting commands" "EJECT FRONT" # index "EJECT FRONT" EJECT FRONT: Same as EJECT but makes sure you are ejected to the next odd numbered page. # index "Formatting commands" "EJECT BACK" # index "EJECT BACK" EJECT BACK: Same as EJECT but makes sure you are ejected to the next even numbered page. # index "Formatting commands" "FOOTER" # index "FOOTER" FOOTER ... END: Defines a footer to appear at the bottom of each page. Has same features that TITLE ... END has; see that discussion. # index "Formatting commands" "INCLUDE filename" # index "INCLUDE filename" # index "Adding files" INCLUDE filename: Adds another file to the processing. This file is processed according to whatever formatting defaults are in use at that point. # index "Formatting commands" "INDENT=n" # index "INDENT=n" INDENT=n: Indents the text which follows by "n" spaces. Essentially sets the left margin. Default value: INDENT=0. # index "Formatting commands" "INDENT=n-n" # index "INDENT n-n" # index "Bulleted text" INDENT=n-n: Specifies that the most of the lines of a paragraph are to be indented by "n" spaces whereas the first word of the first line is to be indented by "n-n" spaces. For example, "INDENT 5-3" will indent the first word by two spaces and the subsequent lines by 5 spaces. This is frequently used for bulleted text. # index "Bulleted text" "Tricks" Note with bulleted items that if you want single-spaced items bulleted, include a #paragraph statement before the next bullet. This is only a problem because the routine doesn't start re-indenting text until it thinks it's at another paragraph. (A blank line would have worked fine but you want it single spaced some times.) For example: # indent 5-2 * This is one paragraph to be indented # paragraph * And this is another. Remember that the indentation rule applies to the first word of the first line of a given paragraph. That word can be a bullet (like an asterisk) but it can also be an actual word. This is useful when the first words of different paragraphs are of different lengths. For example: # indent 8-8 Home Takes you to the top line # indent 8-8 End Takes you to the bottom line # indent 8-8 F1 Presents help This ends up like this: Home Takes you to the top line End Takes you to the bottom line F1 Presents help # index "Wrapping" "Faking out" # index "Alt-255 key" If you want, you can fake the system into thinking that multiple words are, in fact single words for indentation or word-wrapping purchases. This is done by putting a non-printable character instead of a space character between the words. A good character to use is Alt-255 (press the Alt key, while it's down, press the digits 2, 5, 5 on the numeric keypad, then release the Alt key). This character shows up as a space but the system treats it as a regular character so it doesn't split up the words it's between. Warning: It's easy to forget you used Alt-255. If you use Alt-255 frequently, remember to check for it with a hex text viewer (like LIST) when you're wondering why text didn't wrap or otherwise behave the way you expected. # index "Formatting commands" "INDENT=n+n" # index "INDENT=n+n" INDENT=n+n: Specifies that the most of the lines of a paragraph are to be indented by "n" spaces whereas the first line is to be indented by "n+n" spaces. For example, "INDENT 5+3" will indent the first line by eight spaces and the subsequent lines by 5 spaces. # index "Formatting commands" "-INDENT" # index "-INDENT" -INDENT: Same thing as INDENT=0. # index "Formatting commands" "JUSTIFY" # index "JUSTIFY" JUSTIFY: Justifies text (makes right margins flush) within the default page width. See also: ALIGN, CENTER, LENGTH, RIGHT, and VERBATIM. # index "Formatting commands" "-JUSTIFY" # index "-JUSTIFY" -JUSTIFY: Same thing as VERBATIM. # index "Formatting commands" "LENGTH=n" # index "LENGTH=n" LENGTH=n: Specifies the default line length. (Page lengths are controlled by the PAGE=command.) Default value: LENGTH=80. See also: ALIGN, CENTER, JUSTIFY, RIGHT, and VERBATIM. # index "Formatting commands" "MARKER=c" # index "MARKER=c" # index "Changing marker character" MARKER=c: Defines the single-character marker indicator that will appear in column 1 of all subsequent lines. Default value: MARKER=#. # index "Formatting commands" "NEXT=n" # index "NEXT=n" NEXT=n: Specifies which page number will appear the next time ^B appears in a title, footer, or header. You can specify "-NEXT" or "NEXT=0" to start at 0. Starts at NEXT=1 typically. # index "Formatting commands" "-PAGE" # index "-PAGE" -PAGE: Same as "PAGE=0". # index "Formatting commands" "PAGE=n" # index "PAGE=n" PAGE=n: Defines default page length. You can say "PAGE=0" to set continuous pages. (You have to have a page length specified if you're using the MULTICOLUMN option though.) Default value: PAGE=60. # index "Formatting commands" "PAGEEJECT" # index "PAGEEJECT" PAGEEJECT: Says that pages are to be ended with a page eject symbol (the female symbol) instead of padding the pages with blank lines). This is the default value. See also: PAGEFILL. # index "Formatting commands" "PAGEFILL" # index "PAGEFILL" PAGEFILL: Says that pages are to be ended by padding them with blank lines up to the specified PAGE=n value. See also: PAGEEJECT. # index "Formatting commands" "PARAGRAPH" # index "PARAGRAPH" PARAGRAPH: Says that a new paragraph is about to begin. This is primarily used when you have something like bulleted text which might not be properly aligned. For example: # unit # verbatim # align length 40 indent 5-2 * First bulleted item # paragraph * Second bulleted item. Note that this would have been considered to be part of the first paragraph since it started in column 1 and there was no blank line between them. # end # index "Formatting commands" "RIGHT" # index "RIGHT" RIGHT: Moves all text to be flush to the right margin. Doesn't adjust any spacing between words or anything. See also: ALIGN, CENTER, JUSTIFY, LENGTH, and VERBATIM. # index "Formatting commands" "-RIGHT" # index "-RIGHT" -RIGHT: Same thing as VERBATIM. # index "Formatting commands" "SINGLE" # index "SINGLE" SINGLE: Single-spaces all text. This is the default spacing. See also: DOUBLE, SPACING=n, and TRIPLE. # index "Formatting commands" "SPACING=n" # index "SPACING=n" SPACING=n: Sets spacing between lines as "n" number of lines. See also: DOUBLE (which is SPACING=2), SINGLE (SPACING=1), and TRIPLE (SPACING=3). # index "Formatting commands" "TITLE" # index "TITLE" TITLE ... END: Defines a title to appear at the top of each page. Any number of lines can appear in the title. The title ends with a marker line that contains the "end" command; if no "end" command is provided, the program presumes there is one after the last line of your file. Spacing, indentation, length, and alignment cannot vary within the title; the last one assigned will win. See "control codes" discussion below for characters that can appear in the title. To eliminate the title, define a title without any lines in it. See also: FOOTER ... END, HEADER ... END and UNIT ... END. Example: # title center length=80 This is my program! # end # index "Formatting commands" "TRIPLE" # index "TRIPLE" TRIPLE: Triple-spaces all text. See also: DOUBLE, SINGLE, and SPACING=n. # index "Formatting commands" "UNIT" # index "UNIT" UNIT ... END: Defines a unit of text with its own unique formatting. Units can have formatting which differs from the text around it and changing the formatting within the Unit will not affect the other text. Has same features that TITLE ... END has; see that discussion. A typical use for the UNIT command is in combination with VERBATIM. This is frequently used when you're aligning or justifying most of the text and then you have one section that isn't to be changed at all. # index "Formatting commands" "VERBATIM" # index "VERBATIM" VERBATIM: Specifies that the text which follows should not be aligned, justified, etc. See also: ALIGN, CENTER, JUSTIFY, and RIGHT. # index "Database-related commands" Database-related functions: The PAGINATE command provides some features to allow you to use it to read in and print out ASCII-delimited and dBase files. For example: # from ascii "Apples",10,5 "Bananas",20,10 will come out as: Apples 10 5 Bananas 20 10 You can use this capability to imbed tables within a report. You can also combine this with SORT=varspec and SELECT=varspec specifications to have the report sorted on specified columns or to subset the columns that get printed out. There are some restrictions to all of this and these are described within each option as appropriate below. NOTE: In general, combining FROM ASCII or FROM DBF or several of the other data-base related functions with options like ALIGN and JUSTIFY will not work. The formatting options will, in general, be ignored. # index "Sorting" "Example" It's often the case that you will want to deal only with a single data set, and you'll have no need for actual text. For example, let's say that you really want something that will sort a file that contains a lot of data. No problem: PAGINATE infile outfile /-PAGE /SORT=1,10 # index "dBase files" "Example" Another example would be that you have something like a dBase file and you want to print it out. Again, no problem. Create a simple control file: # unit # verbatim # heading ^H # end # from dbf # include sample.dbf # end and then create your tables with: PAGINATE ctlfile outfile # index "Database-related commands" "Default values" Default initial values (database-related functions): BAD=ABORT -DELETED DELIMS=",,, FROM FIXED GAP=2 INMISS=NULL INMISSC=NULL OUTMISS=NULL OUTMISSC=NULL SELECT=NULL SEPARATOR=" | " SORT=NULL SUM=NULL -TALLY # index "Database-related commands" "BAD=ABORT" # index "BAD=ABORT" BAD=ABORT: Says that if the program runs into an invalid data value, it should abort processing entirely. # index "Database-related commands" "BAD=MISSING" # index "BAD=MISSING" BAD=MISSING: Says that if the program runs into an invalid data value, it should set the value of that variable as "missing" and continue processing. # index "Database-related commands" "BAD=SKIP" # index "BAD=SKIP" BAD=SKIP: Says that if the program runs into an invalid data value, it should skip the entire data record and continue processing with the next record. # index "Database-related commands" "DELETED" # index "DELETED" DELETED: Says to process deleted records as well as non-deleted records from dBase files. # index "Database-related commands" "-DELETED" # index "-DELETED" -DELETED: Says to skip deleted records. # index "Database-related commands" "DELIMS" # index "DELIMS" # index "Hexadecimal codes" DELIMS=aroundstrings,aroundnums,betweenfields: Allows you to specify the delimiters (in sequence) around string fields, around numeric fields, and between fields. Defaults to: DELIMS=",,, (Use quotes around character strings, nothing around numeric data, and the third comma indicates that there is a comma between fields.) The replacement string can include hexadecimal codes (in the &Hxx format) or decimal codes (in the \ddd format) if necessary so either of the following would put a tab between fields: DELIMS=",,&H09 DELIMS=",,\009 See the table of hexadecimal and decimal codes at the end of this documentation. # index "Database-related commands" "FROM ASCII" # index "FROM ASCII" # index "ASCII-delimited files" # index "Files" "ASCII-delimited" FROM ASCII: Specifies that the next non-marker lines contain ASCII-delimited records. The ASCII-delimited records can be embedded within the report or stored as a separate file (brought in with an INCLUDE statement). See also: FROM DBF and FROM FIXED and most of the other commands in this section. See also: "Field-definition file" discussion. # index "Database-related commands" "FROM DBF" # index "FROM DBF" # index "dBase files" # index "Files" "dBase" FROM DBF: Specifies that the next INCLUDE statement is a dBase file. Unlike with FROM FIXED and FROM ASCII, the dBase file has to be external to the control cards. The output itself, however, will be included with the regular output file. See also: FROM ASCII and FROM FIXED and most of the other commands in this section. See also: "Field-definition file" discussion. # index "Database-related commands" "FROM FIXED" # index "FROM FIXED" FROM FIXED: Specifies that the input file is a fixed-field file. This is typical for most text files. See also: FROM ASCII and FROM DBF. # index "Database-related commands" "-GAP" # index "-GAP" -GAP: Same as "GAP=0". # index "Database-related commands" "GAP=n" # index "GAP=n" GAP=n: Specifies the number of spaces to appear between columns when printing fielded data. If, for example, two columns of numbers are printed, the GAP parameter specifies that "n" number of spaces are to appear between these columns. You can specify "GAP=0" if you don't want any gap to be inserted. Defaults to GAP=2. # index "Database-related commands" "HEADER" # index "HEADER" # index "Column headers" HEADER ... END: Defines a set of column headers that should appear before the actual data. Typically, you can bring these in from the actual dBase file or else use whatever you've specified in the field-definition file by using the "^H" control code. Headers are affected by the MULTICOLUMN specification. Otherwise, they are treated pretty much like Titles and Footers. See the discussion of TITLE ... END. # index "Database-related commands" "INCLUDE filename" # index "INCLUDE filename" # index "Files" "Adding" INCLUDE filename: Adds text from another file in at this point. If the routine has been told that this is a FROM DBF or FROM ASCII file, it will process the file appropriately. The filename specification can include drive and path information if desired. # index "Database-related commands" "INCLUDE INDEX" # index "INCLUDE INDEX" INCLUDE INDEX: Creates an index listing at this point in the document. See also: INDEX. # index "Database-related commands" "INDEF filename" # index "INDEF filename" # index "Field-definition file" INDEF filename: Specifies that the file characteristics for the input file which follows are contained in a field-definition file specified as "filename". The filename spec can include drive and path information if desired. See the discussion of "Field-definition files" below. See also: INDEF NULL. # index "Database-related commands" "INDEF NULL" # index "INDEF NULL" INDEF NULL: Says there is no input file definition for what follows. Typically used to turn off the previously-specified input field-definition file. See also: INDEF filename. # index "Database-related commands" "-INDEF" # index "-INDEF" -INDEF: Same thing as INDEF NULL. # index "Database-related commands" "INDEX" # index "INDEX" # index "See Also references" INDEX "word" [ "word" ]... [DUMMY]: Saves an index record, with the specified text and the current page number, at this point. The index is then printed out when you add an INCLUDE INDEX option. The multiple word specifications allow you to specify up to 3 levels of indexing. For example, # index "Computers" "Maintenance" # index "Computers" "Hardware" # eject # index "Computers" "Hardware" # index "Computers" "Software" # include index will generate output that looks in part like this: Computers Hardware; 1, 2 Maintenance; 1 Software; 2 # index "MULTICOLUMN" "With INDEX" # index "INDEX" "With MULTICOLUMN" You can use MULTICOLUMN in combination with the INDEX command. Just make sure you specify the MULTICOLUMN before the INCLUDE INDEX statement as in: # multicolumn 3 # include index # index "DUMMY index references" If DUMMY is specified, the page number is not displayed for this item. This is typically done when you want the index to provide a cross-reference but you don't really want any page numbers showing up. For example: # index "Hardware" "(See Computers)" DUMMY My personal preference is to put all DUMMY index references near the start of your document so you can find them more easily. # index "Database-related commands" "INMISS=val" # index "INMISS=val" INMISS=val: Specifies for ASCII-delimited and dBase input files which numeric values are to be considered indicators for missing values. Missing values are not included in summations. Defaults to INMISS=NULL. See also: INMISSC=val, OUTMISS=val, and OUTMISSC=val. # index "Database-related commands" "INMISSC=val" # index "INMISSC=val" INMISSC=val: Specifies for ASCII-delimited and dBase input files which character values are to be considered indicators for missing values. Defaults to INMISSC=NULL. See also: INMISS=val, OUTMISS=val, and OUTMISSC=val. # index "Database-related commands" "MULTICOLUMN" # index "MULTICOLUMN" # index "SEPARATOR" "With MULTICOLUMN" MULTICOLUMN=n ... END: Specifies that a given block is to be arranged in a multicolumn format. The number of columns is specified as "n"; "MULTICOLUMN=2" would set up a dual-column output. The SEPARATOR string appears between each of the columns. (MULTICOLUMN", by the way, can be abbreviated "MULTI" or "MULTICOL".) Make sure you put any CENTER or ALIGN or whatever statements after the MULTICOLUMN statement. Also note that you can specify a length ("MULTICOLUMN=2 LENGTH=80") but the program internally recalculates the length of each segment each time as the total line length (typically 80) divided by the number of columns minus the width of the separator string. Otherwise, MULTICOLUMN has the same features that TITLE ... END has; see that discussion. (Remember, unless provided otherwise, the "END" command is presumed to be after the last line of your input file.) See also: SEPARATOR=string. Example: # multicolumn 3 separator=" | " lines lots of lines still more # end # index "Database-related commands" "NULLS" # index "NULLS" NULLS: Says that the program will accept values that begin with a decimal zero as being a valid value. Defaults to NULLS. See also: -NULLS. # index "Database-related commands" "-NULLS" # index "-NULLS" -NULLS: Says that values which begin with a decimal zero should be treated as missing by the program. Defaults to NULLS. See also: NULLS. # index "Database-related commands" "OUTDEF filename" # index "OUTDEF filename" # index "Field-definition file" OUTDEF filename: Specifies the field-definition file to create. Typically, the only reason you'd ever use this command is if you want the program to create a field-definition file for a dBase input file. (See the discussion of "Field-definition file" later.) See also: OUTDEF NULL. # index "Database-related commands" "OUTDEF NULL" # index "OUTDEF NULL" OUTDEF NULL: Turns off the output field-definition file specification. See also: OUTDEF filename. # index "Database-related commands" "-OUTDEF" # index "-OUTDEF" -OUTDEF: Same as OUTDEF NULL. # index "Database-related commands" "OUTMISS=val" # index "OUTMISS=val" OUTMISS=val: Specifies what value will be substituted for missing numeric input values on output. Initially defaults to OUTMISS=NULL. See also: INMISS=val, INMISSC=val, and OUTMISSC=val. # index "Database-related commands" "OUTMISSC=val" # index "OUTMISSC=val" OUTMISSC=val: Specifies what value will be substituted for missing character input values on output. Initially defaults to OUTMISSC=NULL. See also: INMISS=val, INMISSC=val, and OUTMISS=val. # index "Database-related commands" "RESET=string" # index "RESET=string" RESET=string: Specifies a character string to stick at the end of the file, to reset the printer after the document is printed. A page eject is typically added automatically if /EJECT is specified. The string can contain special characters by using a "\" followed by the three-digit ASCII code for the character. The typical use for this would be to issue a printer reinitialization string. On a Hewlett-Packard printer, this would probably be RESET=\027E. See also: SETUP=string. # index "Database-related commands" "SELECT=varspec" # index "SELECT=varspec" SELECT=varspec: Specifies which variables or columns should show up in the ultimate file. This allows you to take, for example, a text file and only print the middle 10 columns of it or else to take a dBase file and only print certain variables. See the discussion of "Varspecs" later. See also: SELECT=NULL. # index "Database-related commands" "SELECT=NULL" # index "SELECT=NULL" SELECT=NULL: Specifies that all variables or columns should show up. This is initially the default. See also: SELECT=varspec. # index "Database-related commands" "-SELECT" # index "-SELECT" -SELECT: Same thing as SELECT=NULL. # index "Database-related commands" "SEPARATOR" # index "SEPARATOR" SEPARATOR=string: Specifies the string to appear between columns in a multicolumn output. The string can contain special characters by using a "\" followed by the three-digit ASCII code for the character. For example, to have a graphic vertical bar, use SEPARATOR=\032\179\032 or else enter it directly as SEPARATOR=" ". Initially defaults to SEPARATOR=" | ". See also: MULTICOLUMN=n. # index "Database-related commands" "SETUP=string" # index "SETUP=string" SETUP=string: Specifies the character string to strick at the beginning of the file, to initialize the printer before the document is printed. Typically, you might use an initialization string that sets the printer in compressed, landscape, or whatever mode. The string can contain special characters by using a "\" followed by the three-digit ASCII code for the character. On a Hewlett-Packard printer, this would typically be one of the following codes: SETUP=\027E (portrait mode, 80 column) SETUP=\027E\027(s16.66H (portrait mode, 132 column) On an Epson MX dot-matrix printer, you would typically use these codes: SETUP=\015 (portrait mode, 80 column) SETUP=\018 (portrait mode, 132 column) See also: RESET=string. # index "Database-related commands" "SORT=varspec" # index "SORT=varspec" SORT=varspec: Specifies that the lines should be sorted according to a particular group of columns or variables. See the discussion of "Varspecs" later. Sorting is done based on a case-sensitive search ("Apple" and "Banana" will appear before "air"). Note that sorting works well for character strings but negative numbers can cause it all sorts of problems. The sort field specification is limited to 50 characters. Note that you cannot combine sorting specifications (e.g. descending for some columns and ascending for others.) Initially defaults to SORT=NULL. See also: SORT=NULL. Basic sorting specifications available here (see each separately): SORT --> case-sensitive, ascending sort SORTD --> case-sensitive, descending sort SORTI --> case-insensitive, ascending sort SORTDI --> case-insensitive, descending sort SORTID --> case-insensitive, descending sort # index "Database-related commands" "SORT=NULL" # index "SORT=NULL" SORT=NULL: Turns off any sorting specification. This statement is vital if you have any text appearing after a sorted section. Remember, you cannot have multiple sorting specifications going on so this is the same as all of the following: -SORT, -SORTI, -SORTD, -SORTID, -SORTDI, SORTI=NULL, SORTD=NULL, SORTDI=NULL, and SORTID=NULL. This statement is initially the default. # index "Database-related commands" "-SORT" # index "-SORT" -SORT: Same as SORT=NULL. # index "Database-related commands" "SORTD=varspec" # index "SORTD=varspec" SORTD=varspec: Similar to SORT=varspec but sorting is done in descending sequence. See SORT=varspec and SORT=NULL. # index "Database-related commands" "SORTD=NULL" # index "SORTD=NULL" SORTD=NULL: Same as SORT=NULL. # index "Database-related commands" "-SORTD" # index "-SORTD" -SORTD: Same as SORT=NULL. # index "Database-related commands" "SORTDI=varspec" # index "SORTDI=varspec" SORTDI=varspec: Similar to SORT=varspec but sorting is done in descending sequence and sorting is case insensitive. Identical to SORTID=varspec. See SORT=varspec and SORT=NULL. # index "Database-related commands" "SORTDI=NULL" # index "SORTDI=NULL" SORTDI=NULL: Same as SORT=NULL. # index "Database-related commands" "-SORTDI" # index "-SORTDI" -SORTDI: Same as SORT=NULL. # index "Database-related commands" "SORTI=varspec" # index "SORTI=varspec" SORTI=varspec: Same as SORT=varspec except the sorting is done in a case-insensitive manner ("big" shows up between "Apple" and "Caramel"). See SORT=varspec and SORT=NULL. # index "Database-related commands" "SORTI=NULL" # index "SORTI=NULL" SORTI=NULL: Same as SORT=NULL. # index "Database-related commands" "-SORTI" # index "-SORTI" -SORTI: Same as SORT=NULL. # index "Database-related commands" "SORTID=varspec" # index "SORTID=varspec" SORTID=varspec: Same as SORTDI=varspec. # index "Database-related commands" "SORTID=NULL" # index "SORTID=NULL" SORTID=NULL: Same as SORT=NULL. # index "Database-related commands" "-SORTID" # index "-SORTID" -SORTID: Same as SORT=NULL. # index "Control codes" # index "Page numbers" # index "Date-stamps" # index "Time-stamps" # index "Column headers" # index "^B" # index "^D" # index "^T" # index "^N" # index "^A" # index "^I" # index "^H" Control codes: Within titles, headers, and footers, you can embed the following codes. These codes are case-sensitive; "^b^" will not translated as the current page number. These codes will be expanded on output: ^B current page number ^D pagination date (in mm/dd/yy format) ^T pagination time (in hh:mm format) ^N name of the input file (without drive or path information) ^A input file's creation date (in mm/dd/yy format) ^I input file's creation time (in hh:mm format) ^H column headers (when appropriate) Note that formatting commands like centering will be adjusted based on the replacement contents for these codes. A line containing a one-digit page number will be centered differently than the exact same line containing a three-digit page number. Example: # title center length 80 File ^N listing, page ^B # end # index "Varspecs" # index "Specifying columns" # index "Specifying variables" # index "Columns" "Specifying" Varspecs: Several of the commands (e.g. SELECT and SORT) expect you to pass in a "varspec" parameter. Varspec's indicate which variables or columns to process. The format for the varspec is: n[-n] [ , n-[n] ]... where "n" is a single variable/column. "n-n" indicates you want a range of variables/columns. For FROM ASCII or FROM DBF, the "n" corresponds to a variable number. For FROM FIXED, the "n" corresponds to a physical one-byte column. For example: # from ascii # select 1,3 "Testing",2,4 "All",5,7 "This",1,6 says to display the 1st and 3rd variables and results in something like this: Testing 4 All 7 This 6 On the other hand, if you're processing fixed-fielded data, the varspec will select individual columns. So: # from fixed # select 1-10,15 1234567_10_2345678 Testing abcdefgh All abcdefgh This abcdefgh will come out like this: Testing e All e This e # index "Field-definition file" # index "ASCII-delimited files" # index "dBase files" Field-definition file: For data files (ASCII-delimited, dBase, and fixed field input files), you can use PAGINATE.EXE to present a reasonably formatted listing of variables. Unless you are reading a dBase file, this program requires a field-definition file to figure out the characteristics for each field and also to set certain file characteristics. If you're processing an ASCII-delimited input file, the routine can try to create a field-definition file for you if desired. The definition file can be created with any text editor. The definition file consists of several records with the following fields separated by spaces. Except for the record type indicator (which must begin in column 1), all other fields can be placed in any columns: (1) record type (see below) (2) length of field on input (3) number of decimal places for numeric data (if you don't know, put a "?" here; for non-numeric data, a "0" is fine) on output (4) length of field on output Any characters after the field length are treated as comment fields. You would typically use this to enter the field name or column position or any other information of use to you. The data record types accepted by this routine are as follows: type C = character data N = numeric L = logical (T or F) D = date (in yyyymmdd format) The data fields should be in the order the fields are found in the source file. Note that for fixed field files, you have to account for every byte in the file. If you have something like this: 12345678_1_2345678_2_2345678_3 (column positions) APPLE X Y 12 BANANAS Even though you may think you only have five fields, the following .DEF file will NOT work: ; Bad .DEF file: Note does not account for blank spaces C 8 0 8 Fruit1 C 1 0 1 Class1 C 1 0 1 Class2 N 5 0 5 Value C 11 0 11 Fruit2 You may want the Fruit1 field to be in columns 1 through 8 and Class1 to be in column 10 but the routine will not know to skip column 9 so it will start reading Class1 beginning in column 9, Class2 beginning in column 10, etc. To drop the blank positions, you have to add dummy fields on input and ask for them to be dropped on output: ; Good .DEF file: Spaces between fields are accounted for C 8 0 8 Fruit1 C 1 0 0 Filler C 1 0 1 Class1 C 1 0 0 Filler C 1 0 1 Class2 C 1 0 0 Filler N 5 0 5 Value C 1 0 0 Filler C 11 0 11 Fruit2 You can also use the input field length and output field lengths to either drop fields using other formats (by specifying a zero length for the output field length) or for creating fields on output (by specifying a zero length for the input field length). You can also use this to expand on contract a field. For example, if Fruit1 is 8 characters long but you only want it to occupy 4 characters on output (thus the field would be truncated), specify 8 for the input field length and 4 for the output field length. # index "Command-line options" # index "Marker commands" # index "DOS command-line options" # index "/ vs #" Commands which can appear both in marker lines and at the DOS command line: Note that these commands typically begin with a "#" within marker commands and multiple commands can be specified with a single marker command. From the DOS command line, however, you must begin each with a "/". Each functions identically to the way the marker command does and can be overridden with subsequent marker commands imbedded in the files themselves. Note that while just about every marker command can be specified in the DOS command line, some of the parms (like EJECT) aren't all that useful from the command line. Several commands (like FOOTER and HEADER) have no usefulness on the command line at all and are listed as "(don't use)" here. Marker command: DOS command line parm: % comments (don't use) ADJUST /ADJUST -ADJUST /-ADJUST ALIGN /ALIGN -ALIGN /-ALIGN CENTER /CENTER -CENTER /-CENTER DOUBLE /DOUBLE EJECT /EJECT EJECT FRONT /EJECT FRONT EJECT BACK /EJECT BACK FOOTER ... END (don't use) INCLUDE filename (don't use) INDENT=n /INDENT=n INDENT=n-n /INDENT=n-n INDENT=n+n /INDENT=n+n -INDENT /-INDENT JUSTIFY /JUSTIFY LENGTH=n /LENGTH=n MARKER=c /MARKER=c NEXT=n /NEXT=n PAGE=n /PAGE=n PAGEEJECT /PAGEEJECT PAGEFILL /PAGEFILL PARAGRAPH (don't use) RIGHT /RIGHT SINGLE /SINGLE SPACING=n /SPACING=n TITLE ... END (don't use) TRIPLE /TRIPLE UNIT ... END (don't use) VERBATIM /VERBATIM Database command: DOS command line parm: BAD=ABORT /BAD=ABORT BAD=MISSING /BAD=MISSING BAD=SKIP /BAD=SKIP DELETED /DELETED -DELETED /-DELETED DELIMS=val,val,val /DELIMS=val,val,val FROM ASCII /FROM=ASCII FROM DBF /FROM=DBF FROM FIXED /FROM=FIXED GAP=n /GAP=n HEADER ... END (don't use) INCLUDE filename (don't use) INCLUDE INDEX (don't use) INDEF=filename /INDEF=filename INDEF=NULL /INDEF=NULL -INDEF /-INDEF INDEX "word" ["word"]... (don't use) INMISS=val /INMISS=val INMISSC=val /INMISSC=val MULTICOLUMN=n ... END /MULTICOLUMN=n NULLS /NULLS -NULLS /-NULLS OUTDEF=filename /OUTDEF=filename OUTDEF=NULL /OUTDEF=NULL -OUTDEF /-OUTDEF OUTMISS=val /OUTMISS=val OUTMISSC=val /OUTMISSC=val RESET=string /RESET=string SELECT=varspec /SELECT=varspec SELECT=NULL /SELECT=NULL -SELECT /-SELECT SEPARATOR=string /SEPARATOR=string SETUP=string /SETUP=string SORT=varspec /SORT=varspec SORT=NULL /SORT=NULL -SORT /-SORT SORTD=varspec /SORTD=varspec SORTD=NULL /SORTD=NULL -SORTD /-SORTD SORTDI=varspec /SORTDI=varspec SORTDI=NULL /SORTDI=NULL -SORTDI /-SORTDI SORTI=varspec /SORTI=varspec SORTI=NULL /SORTI=NULL -SORTI /-SORTI SORTID=varspec /SORTID=varspec SORTID=NULL /SORTID=NULL -SORTID /-SORTID # index "Parameters" "Specifying" # index "INI file" # index "SET PAGINATE environmental variable" Specifying parameters: Parameters for this program can be set in the following ways. The last setting encountered always wins: - Read from an *.INI file (see below), - Through the use of an environmental variable (SET AV=whatever), or - From the command line (see "Syntax" below) # index "INI file" The PAGINATE.INI file: PAGINATE will read a PAGINATE.INI file if one is found. (You can specify a different file name if desired.) The file is an ASCII text file that can be created maintained by hand. The file can consist or one or more command line parameters (only those that begin with a "/"; no multi-word ones), one statement per line. The file can also contain comments which are blank lines or any line beginning with: ; (semi-colon) : (colon) ' (quote) PAGINATE looks for the initialization file in your default subdirectory first. It then searches for it in the subdirectory where the executable was and then goes through your DOS path. Passing in "/-I" or "/INULL" skips loading the INI file. This saves some execution time as the program does not need to search your path for the file. # index "Examples" # index "Directories" "Multicolumn" Examples: This section adds some examples of how you can use PAGINATE. I'll add to it over time. Multicolumn Directories: You want to generate a multicolumn listing of directories which are sorted going down the page instead of across the page like "DIR /W" does. PAGINATE can handle this fairly easily. Create a control file called C:\DIRW.CTL with these statements (the SETUP and RESET statements work for Hewlett-Packard printers to put you into compressed mode): #LENGTH 132 #SETUP "\027E" #RESET "\027E\027(s16.66H" #MULTICOLUMN 7 Then create a batch file called DIRW.BAT: DIR /ON > TEMP.TXT PAGINATE TEMP.TXT TEMP.OUT /CC:\DIRW.CTL /OVERWRITE DEL TEMP.TXT This will route your directory to a disk file and rewrite it as TEMP.OUT in a multicolumn format with printer controls. # # index "Transition notes" # index "MULTICOL program" Transition notes: The PAGINATE command is in early release. I expect to add a number of features but they'll be put in on an as-possible basis. PAGINATE.EXE is designed to replace my MULTICOL.EXE program which, over time, I've felt has the wrong focus. I'm finding myself using MULTICOL primarily to add footers to text files. While it can do this okay within limits, a more full-featured reformatter would suit this task better. I figured if I started from scratch with PAGINATE.EXE, I could get a decent replacement without having to worry about affecting existing code. Of course, PAGINATE and MULTICOL (and CONVERT.EXE) use some of the same subroutines so changes in one place are affecting the other routines. Sorry about that! I hope things still work. Major differences at this point between PAGINATE.EXE and MULTICOL.EXE are the following: # unit # indent 4-2 * MULTICOL expected you to pass in the formatting controls from the DOS command lines (or use a control file). There was only one set of controls which could be applied. PAGINATE, on the other hand, typically expects the controls to be embedded directly in the text (although it allows you to pass most of them in or use a control file). Formatting specifications can change throughout the text. * MULTICOL had a limited number of formatting options. PAGINATE, since it uses embedded commands, could in theory due lots of new things. * MULTICOL handled dBase and ASCII-delimited files. PAGINATE has to add these still. Most of the MULTICOL features (and parameters) will be added to PAGINATE when I get the chance. * On large documents, the best that MULTICOL could really do was add headers and page ejects. PAGINATE is designed to provide flexibility for large documents. * The MULTICOL command let you specify titles, footers, and column headers from the command line. PAGINATE does not let you do this. # end # index "Syntax" Syntax: # unit # verbatim PAGINATE infile outfile [ /Cctlfile ] [ /BEEP | /-BEEP ] [ /DEBUG ] [ /OVERWRITE | /APPEND | /-OVERWRITE | /OVERASK ] [ /Iinitfile | /-I ] [ /marker command ]... [ /? ] [ /?&H ] # end where: # index "Infile parameter" "infile" is the input file to process. This file can contain INCLUDE statements to add in other files to process. # index "Outfile parameter" "outfile" specifies the name of the output file that is to contain the resulting text. # index "Ctlfile parameter" # index "/Cctlfile parameter" "/Cctlfile" is basically the same thing as the infile but it typically contains only marker commands. For example, you might have a straight text file contained in "infile" and then use the "ctlfile" to say how that text file should be processed. # index "/BEEP parameter" "/BEEP" says to sound a tone when the program is finished executing. # index "/-BEEP parameter" "/-BEEP" says to not sound a tone when the program finishes. This is initially the default. # index "/DEBUG parameter" "/DEBUG" is used for debugging purposes. You might use it when you get an error message that doesn't clearly tell you where the error occurred. /DEBUG will show you the text as it's processed and let you see what's actually being processed and written. # index "/OVERWRITE parameter" "/OVERWRITE" says to overwrite the output file if it exists already. # index "/-OVERWRITE parameter" "/-OVERWRITE" says to abort if the output file exists already. # index "/APPEND parameter" "/APPEND" says to append (add) to the output file if it exists already. This option is only available if you're creating either a fixed-field or ASCII- delimited output file. # index "/OVERASK parameter" "/OVERASK" says to ask if the output file exists already. This is initially the default. # index "/Iinitfile parameter" "/Iinitfile" says to read an initialization file with the file name "initfile". The file specification *must* contain a period. If no drive or path information is specified, the program will search for initfile beginning in your default subdirectory and then going throughout your DOS path. The use of an initialization file is optional. Initially defaults to "/IPAGINATE.INI". # index "/-I parameter" # index "/INULL parameter" "/-I" (or "/INULL") says to skip loading the initialization file. "/marker command" allows you to specify one or more marker commands. These are spelled out in this documentation. # index "/? parameter" "/?" or "/HELP" or "HELP" shows you the syntax for the command. # index "/?&H parameter" "/?&H" gives you a hexadecimal and decimal conversion table. # index "Guthrie, Bruce" # index "Wayne Software" Author: This program was written by Bruce Guthrie of Wayne Software. It is free for use and redistribution provided relevant documentation is kept with the program, no changes are made to the program or documentation, and it is not bundled with commercial programs or charged for separately. People who need to bundle it in for-sale packages must pay a $50 registration fee to "Wayne Software" at the following address. Additional information about this and other Wayne Software programs can be found in the file BRUCEymm.DOC which should be included in the original ZIP file. ("ymm" is replaced by the last digit of the year and the two digit month of the release. BRUCE412.DOC came out in December 1994. This same naming convention is used in naming the ZIP file that this program was included in.) Comments and suggestions can also be sent to: Bruce Guthrie Wayne Software 113 Sheffield St. Silver Spring, MD 20910 fax: (301) 588-8986 See BRUCEymm.DOC file for additional contact information. Foreign users: Please provide an Internet e-mail address in all correspondence. # verbatim # index "Decimal codes" # index "Hexadecimal codes" Decimal and hexadecimal codes: e.g. "\066\097\116" and "&H426174" both are "Bat" +--------------------------------------------------------------------------- | dec hex chr | dec hex chr | dec hex chr | dec hex chr | dec hex chr | +--------------+--------------+--------------+--------------+--------------+ | \000 &H00 nul| \052 &H34 4 | \104 &H68 h | \156 &H9C | \208 &HD0 | | \001 &H01  | \053 &H35 5 | \105 &H69 i | \157 &H9D | \209 &HD1 | | \002 &H02  | \054 &H36 6 | \106 &H6A j | \158 &H9E | \210 &HD2 | | \003 &H03  | \055 &H37 7 | \107 &H6B k | \159 &H9F | \211 &HD3 | | \004 &H04  | \056 &H38 8 | \108 &H6C l | \160 &HA0 | \212 &HD4 | | \005 &H05  | \057 &H39 9 | \109 &H6D m | \161 &HA1 | \213 &HD5 | | \006 &H06  | \058 &H3A : | \110 &H6E n | \162 &HA2 | \214 &HD6 | | \007 &H07 bel| \059 &H3B ; | \111 &H6F o | \163 &HA3 | \215 &HD7 | | \008 &H08 bs | \060 &H3C < | \112 &H70 p | \164 &HA4 | \216 &HD8 | | \009 &H09 tab| \061 &H3D = | \113 &H71 q | \165 &HA5 | \217 &HD9 | | \010 &H0A lf | \062 &H3E > | \114 &H72 r | \166 &HA6 | \218 &HDA | | \011 &H0B vt | \063 &H3F ? | \115 &H73 s | \167 &HA7 | \219 &HDB | | \012 &H0C pg | \064 &H40 @ | \116 &H74 t | \168 &HA8 | \220 &HDC | | \013 &H0D cr | \065 &H41 A | \117 &H75 u | \169 &HA9 | \221 &HDD | | \014 &H0E  | \066 &H42 B | \118 &H76 v | \170 &HAA | \222 &HDE | | \015 &H0F  | \067 &H43 C | \119 &H77 w | \171 &HAB | \223 &HDF | | \016 &H10  | \068 &H44 D | \120 &H78 x | \172 &HAC | \224 &HE0 | | \017 &H11  | \069 &H45 E | \121 &H79 y | \173 &HAD | \225 &HE1 | | \018 &H12  | \070 &H46 F | \122 &H7A z | \174 &HAE | \226 &HE2 | | \019 &H13  | \071 &H47 G | \123 &H7B { | \175 &HAF | \227 &HE3 | | \020 &H14  | \072 &H48 H | \124 &H7C | | \176 &HB0 | \228 &HE4 | | \021 &H15  | \073 &H49 I | \125 &H7D } | \177 &HB1 | \229 &HE5 | | \022 &H16  | \074 &H4A J | \126 &H7E ~ | \178 &HB2 | \230 &HE6 | | \023 &H17  | \075 &H4B K | \127 &H7F  | \179 &HB3 | \231 &HE7 | | \024 &H18  | \076 &H4C L | \128 &H80 | \180 &HB4 | \232 &HE8 | | \025 &H19  | \077 &H4D M | \129 &H81 | \181 &HB5 | \233 &HE9 | | \026 &H1A eof| \078 &H4E N | \130 &H82 | \182 &HB6 | \234 &HEA | | \027 &H1B esc| \079 &H4F O | \131 &H83 | \183 &HB7 | \235 &HEB | | \028 &H1C  | \080 &H50 P | \132 &H84 | \184 &HB8 | \236 &HEC | | \029 &H1D ???| \081 &H51 Q | \133 &H85 | \185 &HB9 | \237 &HED | | \030 &H1E ???| \082 &H52 R | \134 &H86 | \186 &HBA | \238 &HEE | | \031 &H1F ???| \083 &H53 S | \135 &H87 | \187 &HBB | \239 &HEF | | \032 &H20 | \084 &H54 T | \136 &H88 | \188 &HBC | \240 &HF0 | | \033 &H21 ! | \085 &H55 U | \137 &H89 | \189 &HBD | \241 &HF1 | | \034 &H22 " | \086 &H56 V | \138 &H8A | \190 &HBE | \242 &HF2 | | \035 &H23 # | \087 &H57 W | \139 &H8B | \191 &HBF | \243 &HF3 | | \036 &H24 $ | \088 &H58 X | \140 &H8C | \192 &HC0 | \244 &HF4 | | \037 &H25 % | \089 &H59 Y | \141 &H8D | \193 &HC1 | \245 &HF5 | | \038 &H26 & | \090 &H5A Z | \142 &H8E | \194 &HC2 | \246 &HF6 | | \039 &H27 ' | \091 &H5B [ | \143 &H8F | \195 &HC3 | \247 &HF7 | | \040 &H28 ( | \092 &H5C \ | \144 &H90 | \196 &HC4 | \248 &HF8 | | \041 &H29 ) | \093 &H5D ] | \145 &H91 | \197 &HC5 | \249 &HF9 | | \042 &H2A * | \094 &H5E ^ | \146 &H92 | \198 &HC6 | \250 &HFA | | \043 &H2B + | \095 &H5F _ | \147 &H93 | \199 &HC7 | \251 &HFB | | \044 &H2C , | \096 &H60 ` | \148 &H94 | \200 &HC8 | \252 &HFC | | \045 &H2D - | \097 &H61 a | \149 &H95 | \201 &HC9 | \253 &HFD | | \046 &H2E . | \098 &H62 b | \150 &H96 | \202 &HCA | \254 &HFE | | \047 &H2F / | \099 &H63 c | \151 &H97 | \203 &HCB | \255 &HFF | | \048 &H30 0 | \100 &H64 d | \152 &H98 | \204 &HCC | | | \049 &H31 1 | \101 &H65 e | \153 &H99 | \205 &HCD | | | \050 &H32 2 | \102 &H66 f | \154 &H9A | \206 &HCE | | | \051 &H33 3 | \103 &H67 g | \155 &H9B | \207 &HCF | | +--------------+--------------+--------------+--------------+--------------+ # # unit # center Index # end # multicolumn 2 # include index # end