home *** CD-ROM | disk | FTP | other *** search
/ C!T ROM 5 / ctrom5b.zip / ctrom5b / DOS / TEKST / MULTICOL / MULTICOL.DOC < prev    next >
Text File  |  1994-10-13  |  33KB  |  674 lines

  1. MULTICOL.DOC
  2. 10/13/94
  3.  
  4. The MULTICOL.EXE program creates multi-columned listings from a text file.
  5. Features:
  6.  
  7.   * You can specify the number of columns and desired page width for the
  8.     multi-column listing
  9.   * The program can provide titles, column headers, and footers for the
  10.     reformatted listing
  11.   * MULTICOL can also add these titles, etc to single-column listings,
  12.     providing some pagination capabilities for regular text
  13.   * Can reformat for display ASCII-delimited, fixed field, and dBase input files
  14.   * Can present totals and subtotals for dBase and ASCII-delimited fields
  15.   * Can reflow text to fit within the specified page widths
  16.   * Can embed printer control characters in the resulting file
  17.   * Can remove (or add) columns within a text document
  18.  
  19.  
  20. Examples:
  21.  
  22. MULTICOL is an easy way of adding header and footer information to text
  23. documentation.  For my DEMO System documentation, I maintain an initialization
  24. file (MULTIHED.INI)--init files are described below--that includes the following
  25. lines:
  26.  
  27.      ; Is used to create page headings for text documents.
  28.      /COLUMNS=1
  29.      /EJECT
  30.      /LINES=59
  31.      /TITLEC1="^N                   Last revised ^D                     Page ^B"
  32.      /TITLE2=""
  33.      /OVERWRITE
  34.  
  35. Then I create the documentation using the following command:
  36.  
  37.         MULTICOL DEMOSYS.DOC DEMOSYS.REF /IMULTIHED.INI
  38.  
  39. The "^N" parameter in the title is replaced with the file name, "^D" is replaced
  40. with today's date, and "^B" is replaced with the page number.  Notice I'm not
  41. creating a multi-column output here and am not reformatting the original text at
  42. all except to add headers and footers.
  43.  
  44.  
  45. As another example, I frequently need a sorted multi-column directory listing.
  46. DIR /ON /W is fine in DOS but I prefer to see the filenames listed
  47. alphabetically down the page, not across it.  So I maintain an initilization
  48. file (in C:\DIRW.INI) for my Epson printer that contains these lines:
  49.  
  50.      ; Is used for multicolumn DIR listings.
  51.      /COLUMNS=7
  52.      /OVERWRITE
  53.      /WIDTH=132
  54.      ; This is the setup string used to set a Epson to compressed mode.
  55.      /SETUP="\015"
  56.      ; Don't want to leave the printer in that mode when you leave.
  57.      /RESET="\018"
  58.  
  59. Then I create the listing using the following commands:
  60.  
  61.         DIR /ON > TEMP.TXT
  62.         MULTICOL TEMP.TXT TEMP.NEW /IC:\DIRW.INI
  63.  
  64.  
  65. A similar example of the above (multicolumn DIR listings) creates a multicolumn
  66. listing with just the file name and creation date.  This requires creating a
  67. field definition file (called, say, C:\DIRW.DEF) roughly like the following:
  68.  
  69.      c 12 0 12 File Name
  70.      c 11 0 0  File Size
  71.      c 8 0 8   Updated
  72.      /+=-
  73.      /-=.
  74.      /-=Serial
  75.  
  76. Note that this definition file will provide the string "File Name" as the column
  77. header for the first column of data, skip the second (file size), provide
  78. "Updated" for the date, and then skip the rest of the DIR output.  It will also
  79. skip any lines in the directory that don't include a dash ("-") but drop the
  80. records containing "." or "Serial", both of which appear in the heading
  81. information.  Once the definition file is provided, you can create a
  82. three-column listing with the following commands.  (You could make it have more
  83. columns if you wanted to specify compressed options; see the prior example)
  84.  
  85.         DIR /ON > TEMP.TXT
  86.         MULTICOL TEMP.TXT TEMP.NEW /INDEF=C:\DIRW.DEF /COLUMNS=3
  87.  
  88. A sample of what a portion of the output file (TEMP.NEW) might look like:
  89.  
  90.                                      Page 1
  91.                          |                          |
  92. File Name     Updated    | File Name     Updated    | File Name     Updated
  93.                          |                          |
  94. AV       BAS  01-08-94   | DEMOMAKE DOC  01-08-94   | FIXTEXT  DIZ  01-07-94
  95. AV       DIZ  03-22-93   | DEMOMAKE EXE  01-30-94   | FIXTEXT  DOC  01-26-94
  96. AV       DOC  01-08-94   | DEMOMAKE REF  01-08-94   | FIXTEXT  EXE  01-30-94
  97.  
  98.  
  99. The MULTICOL.INI file:
  100.  
  101. MULTICOL will read a MULTICOL.INI file if one is found.  (You can specify a
  102. different file name if desired.) The file is an ASCII text file that can be
  103. created maintained by hand.  The file can consist or one or more command line
  104. parameters (only those that begin with a "/"), one statement per line.
  105.  
  106. The file can also contain comments which are blank lines or any line beginning
  107. with:
  108.         ;    (semi-colon)
  109.         :    (colon)
  110.         '    (quote)
  111.  
  112. MULTICOL looks for the initialization file in your default subdirectory first.
  113. It then searches for it in the subdirectory where the executable was and then
  114. goes through your DOS path.
  115.  
  116. Passing in "/-I" or "/INULL" skips loading the MULTICOL.INI file.
  117.  
  118.  
  119. CONFIGWS.EXE:
  120.  
  121. In addition to using the MULTICOL.INI file, you can permanently change some
  122. defaults within MULTICOL.EXE by using the CONFIGWS.EXE program.  CONFIGWS.EXE is
  123. not included in the MULTICOL distribution package but previous versions can
  124. typically be used with MULTICOL if desired.  (The same CONFIGWS.EXE program can
  125. be used to path a number of Wayne Software programs.) If CONFIGWS can't patch
  126. the executable, it will notify you of this before altering anything.
  127.  
  128. CONFIGWS.EXE allows you to set the following defaults:
  129.  
  130.         If bad data:    /SKIP, /MISSING, or /ABORT
  131.         Noise:          /BEEP or /-BEEP
  132.         Output exists:  /OVERASK, /OVERWRITE, /-OVERWRITE
  133.  
  134. When setting options, the program will process defaults in the following order:
  135.   (1) CONFIGWS.EXE-settable settings
  136.   (2) MULTICOL.INI settings
  137.   (3) command-line settings
  138.  
  139. The *last* settings encountered win.
  140.  
  141.  
  142.  
  143. Field definition file:
  144.  
  145. NOTE:  THE FOLLOWING DISCUSSION DOES NOT APPLY TO BASIC TEXT FILES.  IF YOU JUST
  146. WANT TO ADD HEADERS AND SUCH TO STANDARD TEXT STUFF, SKIP THIS SECTION.  IT IS
  147. APPLICABLE ONLY FOR FIELDED DATA FILES.
  148.  
  149. For data files (ASCII-delimited, dBase, and fixed field input files), you can
  150. use MULTICOL to present a reasonably formatted listing of variables.  Unless you
  151. are reading a dBase file, this program requires a field definition file to
  152. figure out the characteristics for each field and also to set certain file
  153. characteristics.  If you're processing an ASCII-delimited input file, the
  154. routine can try to create a field definition file for you if desired.
  155.  
  156. The definition file can be created with any text editor.  The definition file
  157. consists of several records with the following fields separated by spaces.
  158. Except for the record type indicator (which must begin in column 1), all other
  159. fields can be placed in any columns:
  160.  
  161.         (1) record type (see below)
  162.         (2) length of field on input
  163.         (3) number of decimal places for numeric data (if you don't know,
  164.             put a "?" here; for non-numeric data, a "0" is fine) on output
  165.         (4) length of field on output
  166.  
  167. Any characters after the field length are treated as comment fields.  You would
  168. typically use this to enter the field name or column position or any other
  169. information of use to you.
  170.  
  171. The data record types accepted by this routine are as follows:
  172.  
  173.         type C = character data
  174.              N = numeric
  175.              L = logical (T or F)
  176.              D = date (in yyyymmdd format)
  177.  
  178. The data fields should be in the order the fields are found in the source file.
  179.  
  180. You may also specify up to 10 include filters and up to 10 exclude filters in
  181. the field definition file.  If an include filter is specified, the input record
  182. must contain at least one of the specified character strings in order to be
  183. processed.  If an exclude filter is specified, any input record which contains
  184. any of the specified character strings will be ignored.  Filters are case
  185. sensitive (capitalization matters) and processed as "or" items (if any filter is
  186. met, the condition is met; filters are not combined to determine fulfillment).
  187. The filters are specified in the field definition file in the following ways:
  188.  
  189.         /+=string     include filter, the string "string" can appear anywhere
  190.         /S+=string    include filter, the string "string" is at the beginning
  191.                       of the record
  192.         /+S=string    include filter, the string "string" is at the end of the
  193.                       record
  194.         /-=string     exclude filter, the string "string" can appear anywhere
  195.         /S-=string    exclude filter, the string "string" is at the beginning
  196.                       of the record
  197.         /-S=string    exclude filter, the string "string" is at the end of the
  198.                       record
  199.  
  200.  
  201. For example, if you want to specify in your control file that you only want
  202. records that contain either "Japan" or "France" *and* you want to exclude any
  203. records that begin with an underscore character, you would need to include the
  204. following three filter statements:
  205.  
  206.         /+=Japan
  207.         /+=France
  208.         /S-=_
  209.  
  210. The character string can include hexadecimal codes (in the &Hxx format) or
  211. decimal codes (in the \ddd format) if necessary.
  212.  
  213. Note that for fixed field files, you have to account for every byte in the file.
  214. If you have something like this:
  215.  
  216.         12345678_1_2345678_2_2345678_3      (column positions)
  217.         APPLE    X Y    12 BANANAS
  218.  
  219. Even though you may think you only have five fields, the following .DEF file
  220. will NOT work:
  221.  
  222.         ; Bad .DEF file:  Note does not account for blank spaces
  223.         C   8 0   8 Fruit1
  224.         C   1 0   1 Class1
  225.         C   1 0   1 Class2
  226.         N   5 0   5 Value
  227.         C  11 0  11 Fruit2
  228.  
  229. You may want the Fruit1 field to be in columns 1 through 8 and Class1 to be in
  230. column 10 but the routine will not know to skip column 9 so it will start
  231. reading Class1 beginning in column 9, Class2 beginning in column 10, etc.  To
  232. drop the blank positions, you have to add dummy fields on input and ask for them
  233. to be dropped on output:
  234.  
  235.         ; Good .DEF file:  Spaces between fields are accounted for
  236.         C   8 0   8 Fruit1
  237.         C   1 0   0 Filler
  238.         C   1 0   1 Class1
  239.         C   1 0   0 Filler
  240.         C   1 0   1 Class2
  241.         C   1 0   0 Filler
  242.         N   5 0   5 Value
  243.         C   1 0   0 Filler
  244.         C  11 0  11 Fruit2
  245.  
  246. You can also use the input field length and output field lengths to either drop
  247. fields using other formats (by specifying a zero length for the output field
  248. length) or for creating fields on output (by specifying a zero length for the
  249. input field length).  You can also use this to expand on contract a field.  For
  250. example, if Fruit1 is 8 characters long but you only want it to occupy 4
  251. characters on output (thus the field would be truncated), specify 8 for the
  252. input field length and 4 for the output field length.
  253.  
  254. For dBase files, a deffile will automatically be created for you unless you
  255. specify /-OUTDEF.  In that case, the routine will read the deffile and act
  256. appropriately.  This is necessary if you want fields expanded or ignored.
  257.  
  258.  
  259. You can also use the /PRINT specification to select which fields you want
  260. printed.
  261.  
  262. For adding headers and footers to regular text files, make sure you specify
  263. /COLUMNS=1.  The system starts a new page when it runs into lines with page
  264. eject characters or when it hits the number of lines specified in the /LINES=n
  265. parameter.  (The page eject part is only true if /-WRAP is in effect.)
  266.  
  267.  
  268. Syntax:
  269.  
  270.     MULTICOL infile outfile [ /OVERWRITE | /-OVERWRITE | /OVERASK ]
  271.       [ /DELIM="string" ] [ /LINES=n ] [ /WIDTH=n ] [ /EJECT | /-EJECT ]
  272.       [ /COLUMNS=n ] [ /-WRAP | /WRAP [ /INDENT=n ] | /REFLOW ]
  273.       [ /Iinitfile | /-I ] [ /SETUP="string" ] [ /RESET="string" ]
  274.       [ /{ TITLE | HEADER | FOOTER }[ R | C | L ][ 1 to 5]="text" ]
  275.       [ /{ TITLE | HEADER | FOOTER }{ T | B }="string" ]
  276.       [ /-TITLE ] [ /FROM FIXED | /FROM ASCII | /FROM DBF ] [ /DELETED ]
  277.       [ /INDEF=deffile | /-INDEF ] [ /OUTDEF=deffile | /-OUTDEF ]
  278.       [ /DELIMS=aroundstrings,aroundnums,betweenfields ] [ /BEEP | /-BEEP ]
  279.       [ /SKIP | /MISSING | /ABORT ] [ /GAP=n ] [ /BLANKS | /-BLANKS ] [ /TALLY ]
  280.       [ /INMISS=val ] [ /INMISSC=val ] [ /OUTMISS=val ] [ /OUTMISSC=val ]
  281.       [ /SUM={ col_spec | var_spec } ] [ /BREAK={ col_spec | var_spec } ]
  282.       [ /PRINT={ col_spec | var_spec } ] [ /? | /?&H ]
  283.  
  284. where:
  285.  
  286. "infile" is the name of the ASCII text file that you want reformatted into a
  287. multicolumn file.
  288.  
  289. "outfile" is the name of the ASCII text file that you want to create.  "infile"
  290. and "outfile" cannot be the same.  While "outfile" is typically a file name, you
  291. can specify devices like "PRN:" or "SCRN:" if you want to.
  292.  
  293. "/OVERWRITE" says to write over the outfile if it already exists.
  294.  
  295. "/-OVERWRITE" says to abort if the outfile exists already.
  296.  
  297. "/OVERASK" says to prompt if the outfile exists already.  This is normally the
  298. default but you can override this using the CONFIGWS.EXE program.
  299.  
  300. "/DELIM="string"" indicates the character string that should be used to separate
  301. columns.  Note that the string itself must appear within quotation marks.  By
  302. default, the string is " | ".
  303.  
  304. "/LINES=n" indicates how many physical lines can fit on your printed page.  This
  305. setting is used for determining where headers, footers, page eject characters
  306. (with /EJECT option), and number of lines per column for multi-column output.
  307. (It's not used in cases where you're using /COLUMNS=1, none of the other stuff,
  308. and you've specified /-TITLE to turn off the default title line.)  You
  309. can also set it to /LINES=0 to turn off page breaks; only the first
  310. title (if any) will print in that case.  Defaults to /LINES=60.
  311.  
  312. "/WIDTH=n" indicates how many physical characters can fit on your printed page.
  313. Defaults to /WIDTH=80.  Typically, if you are in compressed mode, the value is
  314. /WIDTH=132.
  315.  
  316.  
  317. "/EJECT" says to add a page eject after the maximum lines-per-page (/LINES=n)
  318. setting.  This is not recommended if you're using a printer with a defined page
  319. size that is the the same or smaller than the /LINES=n setting.  If you're using
  320. something like a LaserJet, setting /EJECT will typically result in blank pages
  321. being generated after each full page.  The default is "/-EJECT".
  322.  
  323. "/-EJECT" is the opposite of "/EJECT".  This is the default.
  324.  
  325. "/COLUMNS=n" indicates how many text columns you want to appear.  The value can
  326. be as low as one (useful if you're just doing reformatting of paragraphs).
  327. There's no maximum value but anything above 7 or so starts looking worthless.
  328. The default value is /COLUMNS=2.
  329.  
  330. The combination of the /COLUMNS=n, /DELIM="string", and /WIDTH=n tells the
  331. program how wide each physical column is.  For example, using the defaults of
  332. /COLUMNS=2, /DELIM=" | ", and /WIDTH=80, each text column is a maximum of 38
  333. characters.  (Width - (Size of Delimiter * (Number of columns - 1), all divided
  334. by 2.  INT((80-(3*1))/2) is 38.) The routine tells you what column size it
  335. picked; if you don't like the result, adjust some of your other parameters and
  336. try it again.
  337.  
  338. "/-WRAP", "/WRAP", and "/REFLOW" tells the program what you want it to do with
  339. text that exceeds the width of each physical column.  The default is /-WRAP.
  340. Each is explained separately below:
  341.  
  342. "/-WRAP" indicates that long lines are to be truncated and the excess characters
  343. are lost.  This is the default.
  344.  
  345. "/WRAP" says the line is to be parsed into words and any word(s) that doesn't
  346. fit on the original line spills over on successive line(s).  The spillover lines
  347. are indented by the value of "/INDENT=n".  By default, the secondary lines are
  348. indented by 2 spaces ("/INDENT=2").
  349.  
  350. "/INDENT=n"--see /WRAP above.
  351.  
  352. "/REFLOW" is the most sophisticated of the options.  /REFLOW will treat most of
  353. the text as paragraphs are readjust the length of the entire paragraph.  The
  354. reflowing stops whenever a new paragraph is detected.  The routine considers a
  355. new paragraph to start whenever the succeeding line is either blank or it starts
  356. with a space.  Unlike with the other options, you can actually end up with fewer
  357. lines in your output file than you had in your input file using /REFLOW.  This
  358. only happens of course if the source lines were generally shorter than the
  359. computer text column width.
  360.  
  361. "/Iinitfile" says to read an initialization file with the file name "initfile".
  362. The file specification *must* contain a period.  If no drive or path information
  363. is specified, the program will search for initfile beginning in your default
  364. subdirectory and then going throughout your DOS path.  The use of an
  365. initialization file is optional.  Initially defaults to "/IMULTICOL.INI".
  366.  
  367. "/-I" (or "/INULL") says to skip loading the initialization file.
  368.  
  369.  
  370. "/SETUP="string"" specifies the initialization string to put at the beginning of
  371. the file.  This is typically used to make sure your printer has the proper
  372. orientation (landscape vs portrait), characters per inch (cpi), and lines per
  373. inch (lpi) settings before printing.  The setup string itself must appear in
  374. quotation marks.  Use "\027" for the Escape character and any other ASCII code
  375. can be entered with "\" followed by its 3-digit value (e.g.  "\032" is a space).
  376. You can also use hexadecimal values as &Hxx.  See the character table at the end
  377. of this documentation.  You have to know your own setup strings.  Borland's
  378. documentation provides some very useful tables for this sort of thing (use "\"
  379. instead of "/" though).  For an HP LaserJet, the setups I use all of the time
  380. are:
  381.  
  382.         Orientation     PageLen RMargin String
  383.  
  384.         Portrait        60      80      \027E
  385.         Portrait        60      132     \027(s16.66H
  386.         Landscape       45      106     \027&l10
  387.         Landscape       45      176     \027&l10\027(s16.66H
  388.         Landscape       66      106     \027&l1o5.45C
  389.         Landscape       66      176     \027&l1o5.45C\027(s16.66H
  390.  
  391. "/RESET="string"" specifies the string to send after your file is done.  This
  392. typically resets the printer to its system default setting so you won't get
  393. stuck in landscape mode forever.  The setup string itself must appear in
  394. quotation marks.  Use "\027" for the Escape character.  For an HP LaserJet, the
  395. following resets the printer to its factory settings:
  396.  
  397.         \027E
  398.  
  399. "/{ TITLE | HEADER | FOOTER } [ R | C | L ] [ 1 to 5 ]="text"" allows you to
  400. specify up to 5 lines each for the report's TITLE (at the top of each page),
  401. HEADER (at the top of each column), and FOOTER (at the bottom of each page).
  402. You can specify positioning as well:
  403.  
  404.         R = right-justify the text
  405.         C = center the text (this is the default for /TITLE and /HEADER)
  406.         L = left-justify the text (this is the default for /FOOTER)
  407.  
  408. If no line number is specified, line 1 is presumed.  If a line number is
  409. specified, all lines before that number are presumed to contain something and
  410. will be blank filled if you don't provide anything.  If, for example, you
  411. specify "/TITLER3="Hi!"", without specifying any other titles, then you'll get
  412. blank lines for /TITLE1 and /TITLE2, but you won't get any /TITLE4 or /TITLE5.
  413.  
  414. The text itself can contain one of six embedded string-replacement codes:
  415.  
  416.         ^B will be replaced by the page number
  417.         ^D will be replaced by today's date (in mm/dd/yy form)
  418.         ^T will be replaced by today's time (in hh:mm form)
  419.         ^N will be replaced by the input file's name
  420.         ^A will be replaced by the input file's creation date (mm/dd/yy form)
  421.         ^I will be replaced by the input file's creation time (hh:mm form)
  422.  
  423. The only title, header, or footer provided by default is /TITLE1="Page ^B".  If
  424. you don't want to replace the title with something else, the only way to turn it
  425. off entirely is to use the /-TITLE option (below).
  426.  
  427.  
  428. "/{TITLE | HEADER | FOOTER }{ T | B }="string"" allows you to specify a
  429. repeating string to be placed either on top of or on the bottom of your titles,
  430. headers, and footers.  The string, typically consisting of just a few
  431. characters, is repeated by the routine until it fills up the available space.
  432. For example, "/TITLET=" -"" would add the following line at the top of the
  433. report:
  434.  
  435.  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  436.  
  437. This option is typically used to (a) insure that there are blank lines before
  438. footer lines and (b) to have demarcations between sections.
  439.  
  440. "/-TITLE" says to turn off all titles including the default one (/TITLE="Page
  441. ^B").  Note that any /TITLE specifications used after /-TITLE will still appear.
  442.  
  443. "/FROM FIXED" says that the input file is a fixed field file.  Any file can be
  444. fixed field:  a page of text is typically a fixed field of 80 characters.  All
  445. standard text files are fixed-field.  The default for MULTICOL is /FROM FIXED.
  446. Note that if you want, you can specify a field definition file for fixed field
  447. files.  See the examples given in the beginning.
  448.  
  449. "/FROM ASCII" says that the input file is ASCII-delimited (typically with quotes
  450. around strings and commas between fields--MULTICOL treats the quotes as
  451. optional).  Typically, the routine expects an input field-definition file
  452. (/INDEF=deffile) to be specified with the definition of fields.  The routine
  453. will determine a field definition file for you if the /-INDEF parameter is
  454. specified.
  455.  
  456. "/FROM DBF" specifies that the input file is a dBase file.  If the file
  457. extension is .DBF, the routine will presume this.  The routine uses dBase's
  458. default field lengths unless /-INDEF is specified.
  459.  
  460. "/DELETED" applies for dBase input files only.  It says you want to retain
  461. deleted records.  Otherwise, they're dropped in the output file.
  462.  
  463. "/INDEF=deffile" provides the name of the field definition file to be read by
  464. the program.  If no deffile is specifically provided and you're using FROM
  465. ASCII, the routine will presume the field definition file exists and is named
  466. the same thing as the infile but it has the extension of ".DEF".  A deffile has
  467. to be specifically provided for FROM FIXED files if one is desired.
  468.  
  469. "/-INDEF" says there is no field definition file.  This is the default if you're
  470. using FROM DBF or FROM FIXED.
  471.  
  472. "/OUTDEF=deffile" provides the name of the output file that you want the program
  473. to write the field-definition file to.  This is useful in cases where you did
  474. *not* use a field-definition file on input since it allows you to see and
  475. possibly modify the field-definition file for next time.  If no deffile is
  476. provided and you're using FROM DBF, the routine will presume the
  477. field-definition file is named the same thing as the infile but it has an
  478. extension of ".DEF".
  479.  
  480. "/-OUTDEF" says to skip the creation of the field-definition file.  This is the
  481. default for ASCII-delimited and fixed-field files.
  482.  
  483.  
  484. "/DELIMS=aroundstrings,aroundnums,betweenfields" allows you to specify the
  485. delimiters (in sequence) around string fields, around numeric fields, and
  486. between fields.  Defaults to:
  487.  
  488.         /DELIMS=",,,
  489.  
  490. (Use quotes around character strings, nothing around numeric data, and the third
  491. comma indicates that there is a comma between fields.) The replacement string
  492. can include hexadecimal codes (in the &Hxx format) or decimal codes (in the \ddd
  493. format) if necessary so either of the following would put a tab between fields:
  494.  
  495.         /DELIMS=",,&H09
  496.         /DELIMS=",,\009
  497.  
  498. See the table of hexadecimal and decimal codes at the end of this documentation.
  499.  
  500. "/BEEP" beeps when the program is finished.
  501.  
  502. "/-BEEP" reverses /BEEP.  This is normally the default but you can override this
  503. using the CONFIGWS.EXE program.
  504.  
  505. "/SKIP" says to skip ASCII-delimited records with bad data values; otherwise the
  506. routine aborts when it runs into any.  /SKIP, /MISSING, and /ABORT are mutually
  507. exclusive.
  508.  
  509. "/MISSING" says to presume any missing fields in an ASCII-delimited record
  510. should be filled in with blanks (for character fields) and 0 for numeric fields.
  511. Incomplete records are written out (unlike in /SKIP).  /SKIP, /MISSING, and
  512. /ABORT are mutually exclusive.
  513.  
  514. "/ABORT" says to abort when you run into bad records.  This is normally the
  515. default but you can override this using the CONFIGWS.EXE program.  /SKIP,
  516. /MISSING, and /ABORT are mutually exclusive.
  517.  
  518. "/GAP=n" is used when printing ASCII-delimited or dBase files.  It tells the
  519. program how many spaces to print between each variable.  The default is /GAP=2.
  520.  
  521. "/BLANKS" says to retain any blank lines found in the input file when writing
  522. out the file.  This is initially the default.
  523.  
  524. "/-BLANKS" removes the blank lines.
  525.  
  526. "/TALLY" says to present a count of items.  If a /BREAK specification is
  527. provided, there will be a tally for each break as well as for the grand total.
  528.  
  529. "/INMISS=val" specifies that any numeric value that has the character string
  530. representation of "val" will be considered missing.  Note that this is an exact
  531. character string comparison so /INMISS=1 will not compare to a value of "1.00".
  532. Defaults to /INMISS=NULL (which translates as spaces).
  533.  
  534. "/INMISSC=val" specifies that any character string value that has the value of
  535. "val" will be considered missing.  Defaults to /INMISSC=NULL (which translates
  536. as spaces).
  537.  
  538.  
  539. "/OUTMISS=val" specifies that any missing numeric input value will be translated
  540. on output as "val".  For example, "/OUTMISS=N.A." would fill in "N.A." for each
  541. missing value.  Defaults to /OUTMISS=NULL (which translates as spaces).
  542.  
  543. "/OUTMISSC=val" specifies that any missing character input value will be
  544. translated on output as "val".  Defaults to /OUTMISSC=NULL (which translates as
  545. spaces).
  546.  
  547. "/SUM={ col_spec | var_spec }" says to summarize (add) all values in particular
  548. columns.  If ASCII-delimited or dBase input is used, you can specify variables
  549. to be added.  If a /BREAK specification is provided, there will be subtotals at
  550. each break as well as grand total.
  551.  
  552. The "col_spec | var_spec" portion expands to "{ Cx[-x] | Vx[-x] } [, {Cx[-x] |
  553. Vx[-x] } ]..." where "x" is the column or variable number, "-" indicates a
  554. range, and "C" means column whereas "V" means variable.  If you have an
  555. ASCII-delimited file and you want the values of the first three variables
  556. summarized, you'd say "/SUM=C1-3".  If you want variables 2, and 4 through 6
  557. summarized, you'd say "/SUM=C2,C4-6".  If you want the values in columns 10
  558. through 20 summarized, you'd say "/SUM=C10-20".  Note that for column
  559. specifications, you have to request the output columns, not input columns.
  560.  
  561. "/BREAK={ col_spec | var_spec }" says to present tally, total, or blank lines
  562. based on the values in certain columns or variables.  For example, if you had an
  563. alphabetical listing and you wanted to, you could break up the listing by the
  564. first letter of the last name.  A break is generated whenever there is a change
  565. in any character in the column or variable range specified.  The
  566. "col_spec | var_spec" specification is identical to the /SUM specification.
  567.  
  568. "/PRINT={ col_spec | var_spec }" says to print only some of the fields.  For
  569. example, if you have a dBase file with 10 variables and you only want some of
  570. them to print out, you can say "/PRINT=V1-3,V6,V8" or something like that.  Note
  571. that the /PRINT specification works in conjunction with any 0-length output
  572. specifications in the deffile.
  573.  
  574. "/?" or "/HELP" or "HELP" shows you the syntax for the command.
  575.  
  576. "/?&H" gives you a hexadecimal and decimal conversion table.
  577.  
  578.  
  579.  
  580. Return codes:
  581.  
  582. MULTICOL returns the following ERRORLEVEL codes:
  583.         0 = no problems
  584.       254 = problems with format of file
  585.       255 = syntax problems, or /? requested
  586.  
  587.  
  588. Author:
  589.  
  590. This program was written by Bruce Guthrie of Wayne Software.  It is free for use
  591. and redistribution provided relevant documentation is kept with the program, no
  592. changes are made to the program or documentation, and it is not bundled with
  593. commercial programs or charged for separately.  People who need to bundle it in
  594. for-sale packages must pay a $50 registration fee to "Wayne Software" at the
  595. following address.
  596.  
  597. Additional information about this and other Wayne Software programs can be found
  598. in the file BRUCEymm.DOC which should be included in the original ZIP file.
  599. ("ymm" is replaced by the last digit of the year and the two digit month of the
  600. release.  BRUCE312.DOC came out in December 1993.  This same naming convention
  601. is used in naming the ZIP file that this program was included in.) Comments and
  602. suggestions can also be sent to:
  603.  
  604.                 Bruce Guthrie
  605.                 Wayne Software
  606.                 113 Sheffield St.
  607.                 Silver Spring, MD 20910
  608.  
  609.                 fax: (301) 588-8986
  610.  
  611. See BRUCEymm.DOC file for additional contact information.
  612.  
  613. Foreign users:  Please provide an Internet e-mail address in all correspondence.
  614.  
  615.  
  616. Decimal and hexadecimal codes:
  617.   e.g. "\066\097\116" and "&H426174" both are "Bat"
  618. +---------------------------------------------------------------------------
  619. | dec  hex chr | dec  hex chr | dec  hex chr | dec  hex chr | dec  hex chr |
  620. +--------------+--------------+--------------+--------------+--------------+
  621. | \000 &H00 nul| \052 &H34 4  | \104 &H68 h  | \156 &H9C £  | \208 &HD0 ╨  |
  622. | \001 &H01   | \053 &H35 5  | \105 &H69 i  | \157 &H9D ¥  | \209 &HD1 ╤  |
  623. | \002 &H02   | \054 &H36 6  | \106 &H6A j  | \158 &H9E ₧  | \210 &HD2 ╥  |
  624. | \003 &H03   | \055 &H37 7  | \107 &H6B k  | \159 &H9F ƒ  | \211 &HD3 ╙  |
  625. | \004 &H04   | \056 &H38 8  | \108 &H6C l  | \160 &HA0 á  | \212 &HD4 ╘  |
  626. | \005 &H05   | \057 &H39 9  | \109 &H6D m  | \161 &HA1 í  | \213 &HD5 ╒  |
  627. | \006 &H06   | \058 &H3A :  | \110 &H6E n  | \162 &HA2 ó  | \214 &HD6 ╓  |
  628. | \007 &H07 bel| \059 &H3B ;  | \111 &H6F o  | \163 &HA3 ú  | \215 &HD7 ╫  |
  629. | \008 &H08 bs | \060 &H3C <  | \112 &H70 p  | \164 &HA4 ñ  | \216 &HD8 ╪  |
  630. | \009 &H09 tab| \061 &H3D =  | \113 &H71 q  | \165 &HA5 Ñ  | \217 &HD9 ┘  |
  631. | \010 &H0A lf | \062 &H3E >  | \114 &H72 r  | \166 &HA6 ª  | \218 &HDA ┌  |
  632. | \011 &H0B vt | \063 &H3F ?  | \115 &H73 s  | \167 &HA7 º  | \219 &HDB █  |
  633. | \012 &H0C pg | \064 &H40 @  | \116 &H74 t  | \168 &HA8 ¿  | \220 &HDC ▄  |
  634. | \013 &H0D cr | \065 &H41 A  | \117 &H75 u  | \169 &HA9 ⌐  | \221 &HDD ▌  |
  635. | \014 &H0E   | \066 &H42 B  | \118 &H76 v  | \170 &HAA ¬  | \222 &HDE ▐  |
  636. | \015 &H0F   | \067 &H43 C  | \119 &H77 w  | \171 &HAB ½  | \223 &HDF ▀  |
  637. | \016 &H10   | \068 &H44 D  | \120 &H78 x  | \172 &HAC ¼  | \224 &HE0 α  |
  638. | \017 &H11   | \069 &H45 E  | \121 &H79 y  | \173 &HAD ¡  | \225 &HE1 ß  |
  639. | \018 &H12   | \070 &H46 F  | \122 &H7A z  | \174 &HAE «  | \226 &HE2 Γ  |
  640. | \019 &H13   | \071 &H47 G  | \123 &H7B {  | \175 &HAF »  | \227 &HE3 π  |
  641. | \020 &H14   | \072 &H48 H  | \124 &H7C |  | \176 &HB0 ░  | \228 &HE4 Σ  |
  642. | \021 &H15   | \073 &H49 I  | \125 &H7D }  | \177 &HB1 ▒  | \229 &HE5 σ  |
  643. | \022 &H16   | \074 &H4A J  | \126 &H7E ~  | \178 &HB2 ▓  | \230 &HE6 µ  |
  644. | \023 &H17   | \075 &H4B K  | \127 &H7F   | \179 &HB3 │  | \231 &HE7 τ  |
  645. | \024 &H18   | \076 &H4C L  | \128 &H80 Ç  | \180 &HB4 ┤  | \232 &HE8 Φ  |
  646. | \025 &H19   | \077 &H4D M  | \129 &H81 ü  | \181 &HB5 ╡  | \233 &HE9 Θ  |
  647. | \026 &H1A eof| \078 &H4E N  | \130 &H82 é  | \182 &HB6 ╢  | \234 &HEA Ω  |
  648. | \027 &H1B esc| \079 &H4F O  | \131 &H83 â  | \183 &HB7 ╖  | \235 &HEB δ  |
  649. | \028 &H1C   | \080 &H50 P  | \132 &H84 ä  | \184 &HB8 ╕  | \236 &HEC ∞  |
  650. | \029 &H1D ???| \081 &H51 Q  | \133 &H85 à  | \185 &HB9 ╣  | \237 &HED φ  |
  651. | \030 &H1E ???| \082 &H52 R  | \134 &H86 å  | \186 &HBA ║  | \238 &HEE ε  |
  652. | \031 &H1F ???| \083 &H53 S  | \135 &H87 ç  | \187 &HBB ╗  | \239 &HEF ∩  |
  653. | \032 &H20    | \084 &H54 T  | \136 &H88 ê  | \188 &HBC ╝  | \240 &HF0 ≡  |
  654. | \033 &H21 !  | \085 &H55 U  | \137 &H89 ë  | \189 &HBD ╜  | \241 &HF1 ±  |
  655. | \034 &H22 "  | \086 &H56 V  | \138 &H8A è  | \190 &HBE ╛  | \242 &HF2 ≥  |
  656. | \035 &H23 #  | \087 &H57 W  | \139 &H8B ï  | \191 &HBF ┐  | \243 &HF3 ≤  |
  657. | \036 &H24 $  | \088 &H58 X  | \140 &H8C î  | \192 &HC0 └  | \244 &HF4 ⌠  |
  658. | \037 &H25 %  | \089 &H59 Y  | \141 &H8D ì  | \193 &HC1 ┴  | \245 &HF5 ⌡  |
  659. | \038 &H26 &  | \090 &H5A Z  | \142 &H8E Ä  | \194 &HC2 ┬  | \246 &HF6 ÷  |
  660. | \039 &H27 '  | \091 &H5B [  | \143 &H8F Å  | \195 &HC3 ├  | \247 &HF7 ≈  |
  661. | \040 &H28 (  | \092 &H5C \  | \144 &H90 É  | \196 &HC4 ─  | \248 &HF8 °  |
  662. | \041 &H29 )  | \093 &H5D ]  | \145 &H91 æ  | \197 &HC5 ┼  | \249 &HF9 ∙  |
  663. | \042 &H2A *  | \094 &H5E ^  | \146 &H92 Æ  | \198 &HC6 ╞  | \250 &HFA ·  |
  664. | \043 &H2B +  | \095 &H5F _  | \147 &H93 ô  | \199 &HC7 ╟  | \251 &HFB √  |
  665. | \044 &H2C ,  | \096 &H60 `  | \148 &H94 ö  | \200 &HC8 ╚  | \252 &HFC ⁿ  |
  666. | \045 &H2D -  | \097 &H61 a  | \149 &H95 ò  | \201 &HC9 ╔  | \253 &HFD ²  |
  667. | \046 &H2E .  | \098 &H62 b  | \150 &H96 û  | \202 &HCA ╩  | \254 &HFE ■  |
  668. | \047 &H2F /  | \099 &H63 c  | \151 &H97 ù  | \203 &HCB ╦  | \255 &HFF    |
  669. | \048 &H30 0  | \100 &H64 d  | \152 &H98 ÿ  | \204 &HCC ╠  |              |
  670. | \049 &H31 1  | \101 &H65 e  | \153 &H99 Ö  | \205 &HCD ═  |              |
  671. | \050 &H32 2  | \102 &H66 f  | \154 &H9A Ü  | \206 &HCE ╬  |              |
  672. | \051 &H33 3  | \103 &H67 g  | \155 &H9B ¢  | \207 &HCF ╧  |              |
  673. +--------------+--------------+--------------+--------------+--------------+
  674.