home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 December / simtel1292_SIMTEL_1292_Walnut_Creek.iso / msdos / laser / altrft22.arc / ALTERFNT.DOC < prev    next >
Text File  |  1988-10-27  |  47KB  |  820 lines

  1.  
  2.                               ALTERFNT.COM v2.2a
  3.                               ------------
  4.  
  5. Purpose:   Extract image of a soft_font character into a file         Usage 1
  6. ------- |  View|Change downloadable laser soft_font characters        Usage 2
  7.            Put new|altered characters into a font                     Usage 3
  8.         |  Change Font Descriptor                                     Usage 4
  9.         |  Insert new character numbers and character code in a font  Usage 5
  10.         |  Convert Portrait font into Landscape font                  Usage 6
  11.         |  Copy ranges of characters from one font to another         Usage 7
  12.         |  Delete ranges of characters from a font                    Usage 8
  13.         |  Download font [print Table showing characters & Widths]    Usage 9
  14. Graphics Board Not Required
  15.                ===
  16.  
  17. Command:        (Type ALTERFNT from DOS, for a brief summary.)
  18. -------
  19.   alterfnt /cdefgilps[ow] [filename[ filename]] [char[-char]] [char[-char]]..
  20.     ..[ID#[ LPT#]]
  21.  
  22. ==============================================================================
  23. ****WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING****
  24. ==============================================================================
  25.  
  26.     Usages 6-9 can be executed without any special knowledge concerning
  27. soft_fonts.  BUT you MUST:
  28.  
  29. READ THIS DOCUMENT before you try Usages 1-5!  BACKUP your fonts FIRST!!
  30. ==================                             ======
  31.  
  32.     IMPORTANT!  Back-up your original font files (make COPIES) before you
  33. use this utility.  It's EASY to make an irretrievable mess of fonts with
  34. ALTERFNT.  Font files are intolerant:  one incorrect byte, and the printer
  35. rejects them.  It's your fault if you lose originals.  There are no
  36. warranties, expressed or implied, associated with this utility.  I think it
  37. works as described, but THERE MAY BE BUGS!  There ARE odd fonts that don't
  38. adhere strictly to the H-P rules (e.g. IBM10.ARC), and ALTERFNT may render
  39. them unuseable.  More likely, you will make mistakes (fonts are complicated),
  40. or make characters that look awful.  Once you change a font, there's no going
  41. back, no cancel, no "restore" feature:  the font is changed permanently.  You
  42. use ALTERFNT at your own risk ENTIRELY.  You are hereby warned, and I accept
  43. no responsibility for any losses or damages -- direct, indirect, or
  44. consequential -- incurred.  If you don't know, or aren't sure, how to COPY a
  45. file (make a backup copy) or how to restore that copy to your disk under its
  46. original name, or you aren't patient to STUDY THIS DOCUMENT and the examples
  47. provided, then please QUIT NOW.
  48. ==============================================================================
  49.  
  50.  
  51. Usages:
  52. ------
  53. All files must be located in the current directory; no paths permitted
  54. "\" and "/" are synonyms in command line parameter statements
  55. "-" separates character-ranges only
  56.  
  57. 1. alterfnt /G <softfont_source_filename.ext> <character_decimal_code>
  58.               Example:  alterfnt /g tms12.fnt 65  (Ascii 65="A")
  59.     Usage 1 gets or extracts the character descriptor data AND the bit-
  60. mapped image of one character in a fontfile, specified by decimal character
  61. number, and writes it to a temporary Ascii file called BINPIC.TMP, which can
  62. be read and changed by a word processor or (IMAGE ONLY) by ALTERFNT's built-in
  63. Image Editor (see Usage 2).  The image also scrolls on-screen, for simple
  64. viewing, when you execute this option.  The image consists of a pattern of
  65. zeros and ones (0 and 1).  "1" represents one printed dot in a 300x300
  66. dot/inch matrix; "0" represents a space (no printed dot) in the same matrix.
  67. The image is visible; it LOOKS LIKE a letter "A" or whatever (see several
  68. examples below) except that the aspect of the character on-screen is distorted
  69. because the ratio of screen columns to rows is not 1:1.  If you change the
  70. arrangement of 0s and 1s on the BINPIC.TMP image-map, Usage 3 can write that
  71. changed image (stored in file BINPIC.TMP) into a new complete font_file named
  72. TEMPFONT.TMP, which will contain all the OTHER characters of the original
  73. (source) fontfile, together with new data for the ONE character that you have
  74. changed.
  75.  
  76. | In v1.1, no "/G" parameter was required.
  77.  
  78.  
  79. 2. alterfnt /E
  80.     Usage 2 loads the image of one character, stored in BINPIC.TMP
  81. (created with Usage 1), into ALTERFNT's Image Editor.  BINPIC.TMP must exist.
  82. The Editor displays and can change the image, but it cannot change the
  83. Character Descriptor or the size of that image.  Use a word processor to add
  84. or subtract rows and columns, or to alter Character Descriptor values.
  85.  
  86.  
  87. 3. alterfnt /C[O]
  88.     Usage 3 copies an exact duplicate of the source_file named in Usage 1,
  89. except that the single character stored in BINPIC.TMP (generated with Usage 1
  90. and possibly changed by Usage 2 Editor or by a word processor) is substituted
  91. (at beginning/ending byte locations tabled in BINPIC.TMP) for one character in
  92. the source_file.  This copy is written to a temporary fontfile named
  93. TEMPFONT.TMP.  TEMPFONT.TMP is used as an intermediate file, to protect the
  94. source_file, which is NOT CHANGED.  BINPIC.TMP and the original source font
  95. that generated BINPIC.TMP must exist.  On exit you are queried whether to
  96. overwrite the source_file.  This gives an opportunity to download TEMPFONT.TMP
  97. and check the result before changing the source.  Note, however, that
  98. TEMPFONT.TMP will be erased and rewritten the next time you use ALTERFNT, so
  99. you must copy TEMPFONT.TMP to another filename if you wish to continue to re-
  100. write characters from any source file, retain the result of this run, but not
  101. change the source_font.  The "O" switch on the DOS command line automatically
  102. overwrites the source with TEMPFONT.TMP.  (It's illegal to call TEMPFONT.TMP
  103. as the source_file argument in an ALTERFNT command string; TEMPFONT can't be
  104. both source and destination file.)
  105.  
  106. | In v1.1, parameter "C" was labeled "P"; parameter "O" was labeled "C".
  107.  
  108.  
  109. 4. alterfnt /F <filename.ext>
  110.     Usage 4 allows you to view and/or change the 15 parameters of the Font
  111. Descriptor which are significant for the LaserJet II.  Experts only.  (Font
  112. Descriptors are summarized in DESCRPTR.TXT, part of this ALTRFT21.ARC)
  113.  
  114.  
  115. 5. alterfnt /I[O] <destination_filename.ext> <character_decimal_code>
  116.               Example:  alterfnt /io tms12.fnt 65
  117.     Usage 5 inserts a character number (1-255) which does NOT CURRENTLY
  118. EXIST, together with character code stored in BINPIC.TMP, into a font_file.
  119. BINPIC.TMP (Usage 1) and the destination font_file must exist.  Question:  How
  120. do you obtain a BINPIC image of a "non-existent character"?  Answer:  Steal a
  121. `template' from another character, then optionally modify it.  That's
  122. permissible because tabled "Start_Modification | End_Modification" byte
  123. locations are, in this Usage ONLY, ignored [the tabled "Character Number" is
  124. ALWAYS ignored], and the program manually determines where to place the
  125. character within the font on the basis of the character number supplied on the
  126. DOS command line.  All other Character Descriptors remain significant.  This
  127. usage will abort if the character number already exists.  VERY IMPORTANT:
  128. This is the ONLY Usage of ALTERFNT which can put a character number that does
  129. not already exist.  Note that the character NUMBER inserted must fall within a
  130. range accepted by the Font Type (one of the Font Descriptors) of the present
  131. Font; otherwise the Font will crash when you download it to the printer
  132. (ALTERFNT does not check, but Font Type can be changed with Usage 4).  Font
  133. Type "0" (7-bit) will only accept characters within the range 32-127; Font
  134. Type "1" (8-bit) accepts chars 32-127 and 160-255; Font Type "2" (PC-8)
  135. accepts chars 1-6, 16-26, 28-255.  Switch "O" overwrites the source_file with
  136. TEMPFONT.TMP on exit.
  137.  
  138.  
  139. 6. alterfnt /L <portrait_filename.ext>
  140.     Usage 6 copies Portrait fonts into a new font_file which is fully
  141. converted to Landscape orientation.  The Portrait source is not affected.
  142. Landscape files adopt the filename of the portrait file, plus extension .LND:
  143. thus, TMS12.FNT is copied/converted to TMS12.LND.  Any pre-existing file named
  144. e.g. TMS12.LND is erased.  (Why pay extra for Landscape files?)
  145.  
  146.  
  147. 7. alterfnt /P[O] <source_filename.ext> <destination_filename.ext> ...
  148.     ...<source_begin_char[-source_end_char]> <dest_begin_char[-dest_end_char]>
  149.       Examples:
  150. Put source character 65 into destination character 65, and overwrite source:
  151.       alterfnt /po tms12.fnt template.fnt 65 65
  152. Put one source character 45 into destination character range 200-210:
  153.       alterfnt /p tms12.fnt template.fnt 45 200-210
  154. Put range of source characters 1-31 into destination characters 128-158:
  155.       alterfnt /p tms12.fnt template.fnt 1-31 128
  156.     Usage 7 puts a range of source characters into an equivalent range of
  157. (possibly different) destination character numbers, or it puts a single source
  158. character into one or more destination character numbers.  If only one source
  159. character is specified, it is loaded into the entire destination range (one or
  160. more characters).  If multiple-character source range is specified, only the
  161. first character of the destination range need be specified.  If a specified
  162. character number is absent in the destination file, ALTERFNT quits when it
  163. reaches that number.  The Overwrite "O" switch is automatically enabled if
  164. more than one character will be written (source file is changed).
  165.  
  166.  
  167. 8. alterfnt /D[O] <softfont_filename.ext> <begin_char[-end_char]>
  168.               Example:  alterfnt /d tms12.fnt 128-255
  169.     Usage 8 deletes one or more characters from a font_file.  The
  170. character number(s) and associated code are both removed entirely.  If a range
  171. is specified, the beginning and ending characters must exist in the soft_font.
  172. The overwrite "O" switch is automatically enabled if more than one character
  173. will be written (source file is changed).
  174.  
  175.  
  176. 9. alterfnt /S[W] <softfont_filename.ext> <font_ID#>[ lpt#]
  177.               Example:  alterfnt /sw tms12.fnt 0 2
  178.     Usage 9 downloads one fontfile to parallel printers (serial interface
  179. not supported).  Printer must be on-line (no check is performed).  The file is
  180. given "Permanent" status (a software reset will not erase it).  A font ID
  181. number (range 0-32767) must be specified.  LPT1 is default (specify optional
  182. range 1-4).  Optional switch "W" prints (after downloading the font) a table
  183. displaying each character in the font in Ascii order, together with its
  184. Width.  "Width" is defined not as character width alone, but as net cursor
  185. movement (left offset + char width + right offset, or Delta X/4).  "Width" is
  186. stated in dots (300 dots/inch).  Decipoints, an alternate measure of width
  187. (720 decipoints/inch), equals 2.4*dots.  The character width table is printed
  188. on 1 sheet of paper (most utilities require 5+ sheets), but characters in
  189. fonts larger than about 20 points may overlap.
  190.  
  191.                                *      *      *
  192.  
  193.     ALTERFNT's basic concept:  extract the image of a single character
  194. from a softfont, change that image on-screen (where it is displayed
  195. magnified), then write this new image back into the file.
  196.  
  197.     It's a simple idea, and ALTERFNT is fast and easy.  This document is
  198. long because there are many extra considerations if you start to change a
  199. character's height, width, etc.  You can treat ALTERFNT as a toy, to play with
  200. characters, make minor changes to their appearance, etc.  You can also use it
  201. to completely revamp a font (change it from Portrait to Landscape, 7-bit to
  202. PC-8, anything at all) - but at this level you must be thoughtful.  You may
  203. want to order the LaserJet Technical Reference Manual from H-P.  Putting a
  204. diagonal slash through a "0" zero is a piece of cake, but to create new
  205. characters takes clear technical thought and, often, a sense of orthographic
  206. aesthetics that you can only hone with trial and error (it's not easy to make
  207. a good-looking character).
  208.  
  209.     ALTERFNT does no physical harm to a Hewlett Packard LaserJet II, even
  210. if ALTERFNT is misused; but I have not tested the program, and cannot attest,
  211. that it works on any other laser printer.
  212.  
  213.     Repeat:  BACKUP your original fonts!  Do not alter originals.
  214.  
  215.     With effort, ALTERFNT can generate new fonts virtually from scratch,
  216. but ALTERFNT is really designed to change, not create, fonts.  After reading
  217. this text, you'll understand a few basics of LaserJet character definition.
  218.  
  219. Version 2.x:
  220. -----------
  221. Greatly enhanced in features, and much faster.  Writing character Ascii 1 in a
  222.   chock-full 35K font with 245 characters defined [8Mhz AT]:
  223.     Version 1.1:  163 seconds
  224.     Version 2.x:  10 seconds
  225. Much more error-checking of BINPIC.TMP input files.  User is still responsible
  226.   for providing correct Character Descriptor data, but many obvious errors are
  227.   flagged
  228. Built-in Image Editor (Usage 2, see "Hands-On" below)
  229. Bit-dot patterns of any line-length work
  230. ALTERFNT now accepts changes to all the CHARACTER DESCRIPTORS (even those
  231.   marked "DO NOT ALTER")
  232. Change all FONT DESCRIPTORS recognized by the LJ-II, with new ALTERFNT Usage 4
  233.   (change the Maximum Cell Width, Font Orientation, etc etc)
  234. New functions to put long ranges of characters into fonts (Usage 7), to delete
  235.   one or more characters from a font (Usage 8), and to insert a previously
  236.   non-existent character's number and image data (Usage 5)
  237. Convert Portrait font into a Landscape font (Usage 6, nifty)
  238. New Usage 9 downloads a font, and has a handy "W" switch to print out a full
  239.   table of its characters with their individual Widths - useful for
  240.   configuring word processor printer files (see also "Hands-On").  Don't
  241.   blithely change your fonts without checking regularly that the alterations
  242.   actually PRINT!  Download and print a table of its characters.
  243.  
  244.  
  245.     You can't run ALTERFNT successfully unless you read this text.
  246.     --- ----- --- -------- ------------ ------ --- ---- ---- ----
  247.     You need:
  248.  
  249. a laser printer (the program was written for, & tested upon, an
  250.     HP LaserJet II).  May also work with the DeskJet [untested].
  251. at least 1 laser soft_font, preferably a normal (not bold or italic) portrait
  252.     font which includes extended characters above decimal 127 so that you can
  253.     replace seldom-used characters with new characters of your own devising
  254. a word processor that writes pure Ascii text (e.g. XyWrite III+) and puts a
  255.     hard CR/LF Carriage Return/Line Feed combination (Ascii 13 followed by
  256.     Ascii 10) at line ends
  257. file ALTERFNT.COM from this ARChive
  258. Additionally, Vern Buerg's LIST.COM is handy for checking font_files (do they
  259.     define a character number?  was a number deleted properly?  etc)
  260.  
  261. The Hewlett Packard LaserJet Technical Reference Manual (chapter on "Soft Font
  262.     Creation") has complete information.
  263.  
  264.                                *      *      *
  265.  
  266. Hands-On
  267. --------
  268.     This experiment will give you a tiny, painless taste of ALTERFNT (the
  269. program has much more powerful capabilities):
  270.  
  271.   Put a COPY of a standard softfont file in the same directory as
  272.   ALTERFNT.COM.  From DOS, command ALTERFNT /G FONTFILENAME.EXT 79 (Ascii code
  273.   for a capital "O"), then hit the Enter key (carriage return, or <cr>):
  274.  
  275.   e.g.        alterfnt /g garamond.por 79<cr>
  276.  
  277.   You'll see a big "O" scroll up the screen, preceded by a table of
  278.   information comprising mainly the Character Descriptors.  Now (in DOS)
  279.   command ALTERFNT /E<cr>.  This loads ALTERFNT's Image Editor, which is
  280.   designed to refine the appearance of a character.  You can't change the
  281.   Character Descriptors with this Editor, and the Editor won't accept a
  282.   character much larger than 1/2" x 1/2" (158 dots x 158 dots, in a 300
  283.   dot/inch matrix -- actually that's BIG 38-point type -- use a word processor
  284.   for even bigger characters or for changes to height, width, descriptors,
  285.   etc.)  Cursor controls (listed on the Editor's bottom line) move you around
  286.   the screen, or page down|up (page right|left on big characters with F2 and
  287.   F1).  Apart from cursor controls, and "Esc"ape to Quit, you can only INPUT
  288.   two characters:  zero (0) and one (1).  Note that the entire image of letter
  289.   "O" is composed of zeros and ones, each representing one dot in the matrix.
  290.   (This isn't my idea; this is how softfonts are designed.)  "1" means print a
  291.   dot; "0" means don't print a dot (print a space).
  292.  
  293.   Let's CHANGE this pattern, by adding a cross "+" in the center of the "O".
  294.   Draw the lines of the cross by replacing zeros with ones, two or three
  295.   columns|rows wide or thick (otherwise it will appear like a hairline).
  296.   Don't worry if you're messy; you're not affecting your source file.  When
  297.   done, save this image by hitting "Esc"ape, to quit.  Now, "C"opy the changed
  298.   image into a copy of the font by commanding ALTERFNT /C<cr>.  The "C" switch
  299.   puts the image into a temporary fontfile called TEMPFONT.TMP; if you use the
  300.   /CO switch, you'll overwrite your source file, e.g. GARAMOND.POR, and
  301.   permanently change it.  The TEMPFONT.TMP intermediate file lets you test
  302.   without harming the source file.  TEMPFONT.TMP will be identical in every
  303.   respect to your source file except for the one character which you just
  304.   changed (the file length may differ also, because ALTERFNT writes a string
  305.   of Ascii "0"s from the end of the last character to end-of-last-sector).
  306.   Now download this TEMPFONT.TMP file to your printer (Usage 9).  Command,
  307.   from DOS:
  308.  
  309.           alterfnt /sw tempfont.tmp 0<cr>
  310.  
  311.   Parameter "0" assigns TEMPFONT.TMP a font ID# of zero (legal values for the
  312.   font ID are 0-32767).  The "W" parameter lists every character in the font
  313.   on paper, in Ascii order, with character Widths.  N.B.: Any strange printer
  314.   behavior at this stage -- e.g. it prints two sheets, or the yellow Form Feed
  315.   light stays on -- means that the font file is corrupt (with good fonts,
  316.   ALTERFNT should quit to DOS as soon as the printer begins to process its
  317.   first and only sheet).  Don't even try to fix the font; start from scratch.
  318.   Extract a new BINPIC image of the character that has been changed, from an
  319.   ORIGINAL copy of the font file, then graft the changed bit/dot picture onto
  320.   a fresh BINPIC (as described in section "Read Character from One File, Write
  321.   to Another File", below).  Keep in mind that fonts can crash when an older
  322.   BINPIC.TMP file is re-used and the "Start_Modification | End_Modification"
  323.   byte locations have changed.
  324.  
  325.   You might try putting a slash through a zero.  Study the existing character
  326.   "/" (Ascii 47) first, to see how it's constructed (not a mere straight
  327.   line).  The techniques of professional orthographers are fascinating (HP's
  328.   are brilliant).
  329.  
  330.                                *      *      *
  331.  
  332. Character Basics
  333. ----------------
  334.     LaserJet softfont files adhere to a rigid format.  They begin with a
  335. general definition of font characteristics (the "Font Descriptor", which
  336. defines the typeface, pitch, underline positioning, stroke weight, etc, for
  337. the entire font).  You WON'T tamper with this Font Descriptor if you are
  338. simply ADAPTING or ALTERING a pre-existing font (the primary use of ALTERFNT).
  339. Select a font with general characteristics which you like, and accept them.
  340. (ALTERFNT Usage 4 alters the Font Descriptor; Character Descriptors can be
  341. changed with a word processor as an intermediate step between Usages 1 and 3.)
  342.  
  343.     There are three pieces of basic information in the introductory Font
  344. Descriptor which you need to keep in mind.  They are:  the maximum permissible
  345. "Cell Height" and "Cell Width" of characters, and the location of an arbitrary
  346. "Baseline" which serves as a reference point for several parameters of
  347. individual character definitions ("Character Descriptors and Data"), which you
  348. WILL be changing.
  349.  
  350.     After the overall Font Descriptor, softfont files describe each
  351. individual character in the font, in ascending character-number order (note
  352. that font character numbers, e.g. in the Roman-8 set, do NOT necessarily
  353. correspond to the console-displayed IBM character set).  Each character has a
  354. 16-byte "Character Descriptor", followed by the Data which describes the
  355. character's appearance.  Not every character in the range 0-255 is defined;
  356. off-the-shelf HP Roman-8 fonts, for example, print only characters in the
  357. Ascii range 32-127 (plus, with fonts which access the extended-character set,
  358. Ascii 161-254).  You can access a more extended range using ALTERFNT, and a
  359. PC-8 Font like TEMPLATE.FNT (provided here -- see below).
  360.  
  361.     Fortunately, the Data which determines character appearance can be
  362. printed to a file and to the console screen, re-shaped by you, then rewritten
  363. to the fontfile very easily, with Usages 1-3.
  364.  
  365.  
  366. Alter a Character:
  367. -----------------
  368.     As an example, at left on the next page is ALTERFNT's output of a
  369. Times Roman TMS12.FNT (a Public Domain font) capital "G" Ascii 71.  (If you
  370. are looking at a printout of this DOC, hold the page at arms-length distance
  371. for greater visual clarity.)  It illustrates why many computer-generated PD
  372. fonts aren't nearly as handsome as the hand-crafted fonts which Hewlett
  373. Packard sells; the one is stodgy where the other is svelte.  The simplest use
  374. of ALTERFNT is to clarify character appearance.  In this case, no change is
  375. made to the size or position of the character matrix; we just alter the
  376. pattern of 0's and 1's, with ALTERFNT's Editor (Usage 2) or a word processor.
  377. At right, we've cleaned this character up (thinned, smoothed, elongated, etc):
  378.  
  379.                 OLD                                         NEW
  380. 00000000000000011111100000000000000000  00000000000000011111110000000001100000
  381. 00000000000011111000011110000010000000  00000000000011111111111110000001100000
  382. 00000000011111111000011111110110000000  00000000011111100000001111110001100000
  383. 00000000111110000000000011111110000000  00000000111110000000000011111101100000
  384. 00000011111100000000000000111110000000  00000011111100000000000000111111100000
  385. 00000111111000000000000000011110000000  00000111111000000000000000011111100000
  386. 00001111110000000000000000001110000000  00001111110000000000000000001111100000
  387. 00011111100000000000000000000110000000  00011111100000000000000000000111100000
  388. 00111111000000000000000000000111000000  00111111000000000000000000000111100000
  389. 00111110000000000000000000000011000000  00111110000000000000000000000011100000
  390. 01111110000000000000000000000011000000  01111110000000000000000000000011100000
  391. 01111110000000000000000000000000000000  01111110000000000000000000000001100000
  392. 11111100000000000000000000000000000000  11111100000000000000000000000001100000
  393. 11111100000000000000000000000000000000  11111100000000000000000000000000000000
  394. 11111000000000000000000000000000000000  11111100000000000000000000000000000000
  395. 11111000000000000000000000000000000000  11111000000000000000000000000000000000
  396. 11111000000000000000001111111111111110  11111000000000000000000000000000000000
  397. 11111000000000000000001111111111111000  11111000000000000000111111111111111111
  398. 11111000000000000000000000111111110000  11111000000000000000000001111111111000
  399. 11111000000000000000000000011111100000  11111000000000000000000000011111100000
  400. 11111000000000000000000000011111100000  11111000000000000000000000001111100000
  401. 11111100000000000000000000011111100000  11111000000000000000000000001111100000
  402. 11111100000000000000000000011111100000  11111000000000000000000000001111110000
  403. 11111100000000000000000000011111100000  11111100000000000000000000001111110000
  404. 11111100000000000000000000011111100000  11111100000000000000000000001111110000
  405. 01111110000000000000000000011111100000  01111110000000000000000000001111110000
  406. 01111110000000000000000000011111100000  01111110000000000000000000001111110000
  407. 00111111000000000000000000011111100000  00111111000000000000000000001111110000
  408. 00111111000000000000000000011111100000  00111111000000000000000000001111100000
  409. 00011111100000000000000000011111100000  00011111100000000000000000001111100000
  410. 00001111110000000000000000011111100000  00001111110000000000000000011111100000
  411. 00000111111000000000000000011111100000  00000111111000000000000000011111000000
  412. 00000011111100000000000000111111000000  00000011111100000000000000111110000000
  413. 00000000111111100000000011111100000000  00000000111111100000000011111100000000
  414. 00000000001111111111111111100000000000  00000000001111111111111111100000000000
  415. 00000000000001111111111100000000000000  00000000000000111111111000000000000000
  416.  
  417.  
  418. Another example:  Suppose you don't like the standard open-quote [grave
  419. accent] Ascii 96; make it complement a close-quote (and prettify it -- note
  420. how sloppy the original at left is; the matrix unnecessarily includes two
  421. columns of zeros at right which aren't used [the Delta X parameter, q.v.
  422. below, should have been used instead to pad spaces]):
  423.  
  424.   OLD            NEW
  425. 00000100      00111000
  426. 00001100      11111110
  427. 00011000      11111111
  428. 00110000      11111111
  429. 01100000      11111100
  430. 01000000      11000000
  431. 11000000      11000000
  432. 11000000      11000000
  433. 10001000      01100000
  434. 11111100      00110000
  435. 11111100      00011000
  436. 11111100      00001100
  437. 11111100      00000110
  438. 00111000      00000011
  439.  
  440.  
  441. Make New Characters:
  442. -------------------
  443.     Suppose you want to create your own characters, or change the size and
  444. position of the matrix (make a character bigger or smaller, add diacritical
  445. marks, etc).  This requires some acquaintance with softfont creation.  The
  446. procedure isn't difficult, but you must be fastidious:  printers will IGNORE
  447. an improperly defined character or font (your printer may eject sheet after
  448. sheet on download -- always check the lights on the printer control panel, to
  449. make sure that the printer has received the font; if the FormFeed light stays
  450. on, it means that the printer received extra or bad characters, and has queued
  451. them for printing -- i.e. something is wrong).
  452.  
  453.     When ALTERFNT writes a bit map to BINPIC.TMP, BINPIC includes a
  454. prefatory table of information drawn from the Font- and Character-Descriptors,
  455. as well as byte locations for writing new data to TEMPFONT.TMP.  Following is
  456. the table for Portrait character "g", Ascii 103, in font TMS12.FT:
  457.  
  458. [Font Name.        DO NOT ALTER]   TMS12.FT
  459. [Character Number. IGNORED]        103
  460. [Baseline.         DO NOT ALTER]   38
  461. [Max Cell Width.   DO NOT ALTER]   52
  462. [Max Cell Height.  DO NOT ALTER]   53
  463. [Font Orientation. DO NOT ALTER]   0
  464. [Start_Mod_Byte.   ALTERFNT USE]   10345
  465. [Next_Mod_Byte.    ALTERFNT USE]   10473
  466. [Internal_use.     DO NOT ALTER]   4
  467. [Continuation.     DO NOT ALTER]   0
  468. [Internal_use.     DO NOT ALTER]   14
  469. [Internal_use.     DO NOT ALTER]   1
  470. Character Orientation:             0
  471. [Internal_use.     DO NOT ALTER]   0
  472. Left Offset:                       2
  473. Top Offset:                        24
  474. Width:                             22
  475. Height:                            36
  476. Delta X:                           100
  477.  
  478.     A complete matrix or "cell" for characters in this font is mapped
  479. below; character "g" is located within it, in accordance with the information
  480. tabled above (note that ALTERFNT.COM produces character-only maps, like "G"
  481. and "`" above, not full-cell maps like "g" below):
  482.  
  483. PORTRAIT VERSION:            1         2         3         4         5
  484.                     1234567890123456789012345678901234567890123456789012
  485.  
  486. -                   0000000000000000000000000000000000000000000000000000  = 1
  487. |                   0000000000000000000000000000000000000000000000000000  = 2
  488. |                   0000000000000000000000000000000000000000000000000000  = 3
  489. |                   0000000000000000000000000000000000000000000000000000  = 4
  490. |                   0000000000000000000000000000000000000000000000000000  = 5
  491. |                   0000000000000000000000000000000000000000000000000000  = 6
  492. |                   0000000000000000000000000000000000000000000000000000  = 7
  493. |                   0000000000000000000000000000000000000000000000000000  = 8
  494. |                   0000000000000000000000000000000000000000000000000000  = 9
  495. |                   0000000000000000000000000000000000000000000000000000  =10
  496. M                   0000000000000000000000000000000000000000000000000000  = 1
  497. a                   0000000000000000000000000000000000000000000000000000  = 2
  498. x                   0000000000000000000000000000000000000000000000000000  = 3
  499. i                   0000000000000000000000000000000000000000000000000000  = 4
  500. m - -               0000000011110000000000000000000000000000000000000000  = 5
  501. u | |               0000001110001111111111000000000000000000000000000000  = 6
  502. m | |               0000011100000111111111100000000000000000000000000000  = 7
  503.   | |               0000111000000011110000000000000000000000000000000000  = 8
  504. C | |               0001111000000011111000000000000000000000000000000000  = 9
  505. e | T               0011111000000001111000000000000000000000000000000000  =20
  506. l | o               0011111000000001111100000000000000000000000000000000  = 1
  507. l | p               0011111000000001111100000000000000000000000000000000  = 2
  508.   |                 0011111000000001111100000000000000000000000000000000  = 3
  509. H H O               0011111000000001111000000000000000000000000000000000  = 4
  510. e e f               0011111000000001111000000000000000000000000000000000  = 5
  511. i i f               0011111100000001111000000000000000000000000000000000  = 6
  512. g g s               0001111100000001111000000000000000000000000000000000  = 7
  513. h h e               0000111100000001110000000000000000000000000000000000  = 8
  514. t t t               0000011110000001100000000000000000000000000000000000  = 9
  515.                     0000001111111111000000000000000000000000000000000000  =30
  516. = = =               0000001000000000000000000000000000000000000000000000  = 1
  517.                     0000010000000000000000000000000000000000000000000000  = 2
  518. 5 3 2               0000110000000000000000000000000000000000000000000000  = 3
  519. 3 6 4               0001110000000000000000000000000000000000000000000000  = 4
  520. | | |               0011111111111110000000000000000000000000000000000000  = 5
  521. | | |               0011111111111111111000000000000000000000000000000000  = 6
  522. | | |               0011111111111111111110000000000000000000000000000000  = 7
  523. | | |               0000111111111111111111000000000000000000000000000000  = 8
  524. | | -   BASELINE   *--0011000000000011111110%000----BASELINE------------  =39
  525. | |  -------------/ 000111000000000000111110 \-----------------  0000000  =40
  526. | | |"*"=position | 001100000000000000001110 |"%"=position     | 0000000  = 1
  527. | | |   of cursor | 011100000000000000001100 | of cursor       | 0000000  = 2
  528. | | |      BEFORE | 011100000000000000001100 | AFTER printing, | 0000000  = 3
  529. | | |    printing | 011100000000000000001100 | determined by   | 0000000  = 4
  530. | |  -------------  011100000000000000011000 | Delta X         | 0000000  = 5
  531. | |                 011110000000000000110000  -----------------  0000000  = 6
  532. | |                 0111111111111111111000000000000000000000000000000000  = 7
  533. | |                 0011111111111111100000000000000000000000000000000000  = 8
  534. | |                 0001111111111111000000000000000000000000000000000000  = 9
  535. | -                 0000001111110000000000000000000000000000000000000000  =50
  536. |                   0000000000000000000000000000000000000000000000000000  = 1
  537. |                   0000000000000000000000000000000000000000000000000000  = 2
  538. -                   0000000000000000000000000000000000000000000000000000  = 3
  539.                    |-|< Left Offset = 2
  540.                      |<-------Width = 22 >|
  541.                    |<-------Delta X = 25*4>|   [i.e. Delta X = 100]
  542.                     |<-------------Maximum Cell Width = 52------------>|
  543.  
  544. LANDSCAPE VERSION:     1         2         3        34         5
  545.               12345678901234567890123456789012345678901234567890123
  546.               =====================================================
  547.            52 0000000000000000000000000000000000000 | 0000000000000       -
  548.               ..................................... | .............       |
  549.               ..................................... | .............       |
  550.            35 0000000000000000000000000000000000000 B 0000000000000       |
  551.             4 0000000000000000000000000000000000000 A 0000000000000       |
  552.             3 0000000000000000000000000000000000000 S 0000000000000       |
  553.             2 00000000000000000  -----------------  E 0000000000000       |
  554.             1 00000000000000000 |"%"=position     | L 0000000000000       |
  555.            30 00000000000000000 | of cursor       | I 0000000000000       |
  556.             9 00000000000000000 | AFTER printing, | N 0000000000000       |
  557.             8 00000000000000000 | determined by   | E 0000000000000       M
  558.             7 00000000000000000 | Delta X         | | 0000000000000       a
  559.             6 00000000000000000  ----------------- \| 0000000000000       x
  560.             5 00000000000000000000000000000000000000%00000000000000       i
  561.             4 00000000000000000000000000000000000000000000000000000     - m
  562.             3 00000000000000001000000000000000000000111000000000000 - - | u
  563.             2 00000000000000011000000000000000000001111111000000000 | | | m
  564.             1 00000000000000011000000000000000000011111111100000000 | | |
  565.            20 00000000000000011000111000000000000011110000110000000 T | | C
  566.             9 00000000000000011011111111100000000111110000011000000 o | | e
  567.             8 00000000000000011111111111110000000111100000001000000 p | | l
  568.             7 00000000000000011111111111111000000111100000001100000   | D l
  569.             6 00000000000000011111111111111100000111000000001110000 O H e
  570.             5 00000000000000011110000000000100001111000000001110000 f e l W
  571.             4 00000000000000011000000000000100001111000000001110000 f i t i
  572.             3 00000000000000010000000000000100001111000000001110000 s g a d
  573.             2 00000000000000100000000000000100001111000000001111000 e h   t
  574.             1 00000000000000100000000000000100001111000000001111000 t t X h
  575.            10 00000000000000100000000000000100001111000000001111000
  576.             9 00000000000000110000000000001100001111000000001111000 = = = =
  577.             8 00000000000000011000000001111100001111000000001111000
  578.             7 00000000000000011111111111111110001111000000001111000 2 2 2 5
  579.             6 00000000000000001111111111111001111111110000001110000 3 2 5 2
  580.             5 00000000000000000111111111110000111111110000011110000 | | * |
  581.             4 00000000000000000011111111100000011110011111111110000 | | 4 |
  582.             3 00000000000000000001111111000000001110001111111100000 | | | |
  583.             2 0000000000000000000000000000000000000 | 0111111000000 | - | |
  584.             1 0000000000000000000000000000000000000 | 0000000000000 -   | -
  585.         ------------------------------------------->*                   -
  586.        |"*"=position |
  587.        |   of cursor |      |< Left Offset = (-24) >|
  588.        |      BEFORE |      |<-------Width = 36--------------->|
  589.        |    printing |
  590.         -------------
  591.               |<-------Maximum Cell Height = 53------------------>|
  592.  
  593. You should NOT change any of the following entries in the BINPIC table unless
  594. you know what you're doing; they are informational.  By the bye, if you're
  595. thinking of mixing portrait and landscape orientation in one font, that's
  596. against HP's rules:
  597.  
  598.   [Internal Use]         [don't change]
  599.   [Alterfnt Use]         [don't change]
  600.   Character Number       [ignored by ALTERFNT Usage 3]
  601.   [Baseline]             [don't change]
  602.   [Max Cell Width]       [don't change]
  603.   [Max Cell Height]      [don't change]
  604.   [Font Orientation]     [don't change]
  605.   [Start_Mod_Byte]       [don't change]
  606.   [Next_Mod_Byte]        [don't change]
  607.   [Continuation]         [don't change]
  608.  
  609. You may want or need to change some of the following.  Unlike v1.x, you can
  610. enter new values in BINPIC.TMP anywhere you want on the line to which they
  611. pertain, after the colon ":" or right-bracket "]".  Then <cr>.  Be sure to
  612. ERASE the old values:
  613.  
  614.   Font Name
  615.   Character Orientation
  616.   Left Offset
  617.   Top Offset
  618.   Width
  619.   Height
  620.   Delta X
  621.  
  622.     (The following discussion pertains specifically to Portrait font
  623. values; Landscape fonts are a bit different.  N.B.  In the Landscape map
  624. above, note that Font Descriptors "Maximum Cell Height" and "Maximum Cell
  625. Width" do NOT change orientation, whereas Character Height and Width DO change
  626. orientation!  Study the above cells carefully.)
  627.  
  628.     You may add or subtract rows or columns to/from the cell (but don't
  629. exceed the maximum cell height and width for the font).  If you change row or
  630. column sizes, some or all of the top offset, left offset, character height,
  631. character width, and "Delta X" values will change also.  For top offset, left
  632. offset, height, and width, simply count them up (refer to figures "g" above in
  633. the proper orientation for an elucidation), and enter new values in the
  634. BINPIC.TMP table in decimal notation.  The Baseline takes a value of 0 for
  635. calculation of the relative top offset.
  636.  
  637.     "Delta X" is slightly complicated:  in Portrait,
  638. Delta X=4*((left_offset)+(character_width)+(right_offset)).  Delta X
  639. determines where the cursor will be located when the NEXT character is printed
  640. (see position "%" in figure "g"); the right offset figure is implicit in
  641. Delta X, and not otherwise stated.  Because Delta X represents quarter-dots,
  642. the total left/right_offset+char_width value is multiplied by 4, and entered
  643. as a decimal number in BINPIC.TMP's table.  N.B.:  Delta X is only significant
  644. for proportional fonts.
  645.  
  646.     Values must AGREE!!  For example, if you change the width or left
  647. offset, then change Delta X accordingly; if you alter the height, examine the
  648. impact on top offset (if top offset stays the same, then make sure you don't
  649. push below the bottom of the cell); and so forth.  You MUST be fastidious,
  650. otherwise the font crashes.
  651.  
  652.     Version 2.x checks BINPIC.TMP fairly thoroughly for errors before
  653. beginning to write files.  When data doesn't agree, lines are different
  654. lengths, or the structure of BINPIC.TMP is incorrect, the problem is described
  655. (the correct formula for calculation generally given).  Note that some checks,
  656. e.g. for the validity of Delta X, are not performed.  The reason is worth
  657. examining.  In general, Delta X MUST exceed the values for (Width +
  658. Left_offset [+ an implied right-offset]) multiplied by 4.  In rare cases, the
  659. implicit right_offset is a negative number; in other words, the cursor moves
  660. left after printing.  Thus Delta X is here less than (Width + Left_offset)*4.
  661. Since these are aesthetic judgments, no routine check is possible.
  662.  
  663.     Don't delete a descriptor line!  If in doubt, go back and generate a
  664. new BINPIC.TMP with Usage 1, to compare.  The best procedure is to keep
  665. BINPIC.TMP in a window of your word processor, and use the DOS Shell function
  666. to go back and forth between the editor and ALTERFNT.  N.B.:  Never use an old
  667. BINPIC.TMP file twice!!  The starting and ending byte locations logged in
  668. BINPIC will change when you re-write a font, which henceforth makes this
  669. BINPIC invalid.  ALTERFNT performs no check for the accuracy of these
  670. locations when re-writing a file.
  671.  
  672. Read Character from One File, Write to Another File:
  673. ---------------------------------------------------
  674.     Suppose you want to read character 64 from one font_file and write it
  675. as character 200 in another file.  You CANNOT accomplish this by changing the
  676. character number in BINPIC's table (ALTERFNT uses BINPIC's tabled byte-
  677. locations to determine where to make changes, not the character number).  If
  678. you don't want to alter the character as an intermediate process, use Usage 7.
  679. If you do want to alter it, use your (multiple-window) word processor as a DOS
  680. shell.  Command from DOS [ALTERFNT Usage 1]:
  681.  
  682.     alterfnt /g source_file 64
  683.  
  684. and load the resultant BINPIC.TMP into a window of your word processor.  Then
  685. shell to DOS and command [ALTERFNT Usage 1]:
  686.  
  687.     alterfnt /g destination_file 200
  688.  
  689. Load this second BINPIC in a second word processor window.
  690.       [You need two BINPICs because ALTERFNT requires character information
  691.       derived from the source_file, as well as read/write byte locations from
  692.       the destination_file.]
  693. Make the desired changes to the bit-image from the source_file.  Now do a
  694. Block DELETE on the DESTINATION_file BINPIC:  erase every line beginning with
  695. the line labelled "Character Orientation" down to the bottom of the bit map
  696. (end-of-file) -- but preserve the first twelve lines of this DESTINATION_file
  697. BINPIC.  (In v1.x, the top seven lines were preserved.)  Then do a Block MOVE
  698. from the SOURCE_file BINPIC, from line "Character Orientation" to the bottom,
  699. and append this block (which includes the bottom portion of the SOURCE_file
  700. BINPIC table plus the whole bit map) to the truncated DESTINATION_file BINPIC.
  701. Store this revised destination_file BINPIC to disk (make it the BINPIC.TMP
  702. file-of-record).  Shell to DOS, and run ALTERFNT /C [Usage 3] to write a new
  703. TEMPFONT.TMP.
  704.  
  705.     With a keyboard or word processor [e.g. XyWrite] macro program, you
  706. can write macros to change a normal characters to bold; to expand point sizes;
  707. etc.
  708.  
  709. TEMPLATE.FNT
  710. ------------
  711.     TEMPLATE.FNT is for the adventurous only.  It's a portrait font_file
  712. which defines every character number from 1 to 255 except characters 7-15 and
  713. 27.  Every number is loaded with the same dummy character (a 1-bit/HMI 0
  714. "nothing" [see v2.0 Update Notes, below] -- you can't use this file as-is).
  715. TEMPLATE's Font Descriptor defines it nominally as a PC-8 font (Symbol Set
  716. 10U).  It has rough characteristics (cell height & width, proportional
  717. spacing, pitch, etc) of a 12pt TimesRoman typeface, but it's assigned Typeface
  718. value 100 (an undefined typeface), so make it whatever you want.  This is for
  719. people who don't like the idiosyncratic Roman-8 set, or don't understand why
  720. HP omitted characters 1-31, 128-160, and 242-246.  Make a SuperFont, with more
  721. characters than you can use.  Refer to DESCRPTR.TXT and then use ALTERFNT
  722. Usage 4 [described in v2.0 Update Notes, below] to change the Font Descriptor
  723. as required.
  724.  
  725.  
  726. Other Files in ALTRFT21.ARC:
  727. ---------------------------
  728.     DESCRPTR.TXT    byte locations, and brief explanations, of Font and
  729.                           Character Descriptor values [technical]
  730.     TEMPLATE.FNT    blank PC-8 font accessing almost every character 1-255
  731.  
  732.  
  733. Limitations:
  734. -----------
  735.     ALTERFNT should work with any file- or character-size; it has been
  736. tested on files of 85K bytes, and 40pt characters.
  737.  
  738.     ALTERFNT only accesses files in the current directory; no pathing is
  739. permitted.
  740.  
  741.     This file is designed for monochrome display adaptors (NO GRAPHICS
  742. REQUIRED).
  743.  
  744.     Hewlett Packard (and perhaps other commercial font publishers also)
  745. categorically forbids its licensees (soft-font purchasers) to modify HP soft-
  746. fonts.
  747.  
  748.  
  749. Update Notes for Version 2.2:
  750. ============================
  751. Corrects improper compile of v2.1
  752.  
  753. Update Notes for Version 2.1:
  754. ============================
  755. Usage 9 is added, which downloads single fonts to a parallel printer, and
  756. optionally prints a character|width table of the font.  DOWNLD.COM is removed
  757. from ALTRFT21.ARC.  Note that this has two drawbacks:  DOWNLD performs a check
  758. for printer on-line before downloading, and offers the option of
  759. Permanent|Temporary font status.  ALTERFNT Usage 9 automatically downloads
  760. fonts with Permanent status, and does not perform an on-line check.
  761. Documentation errors fixed.
  762.  
  763. Update Notes for Version 2.0:
  764. ============================
  765. The executable file (ALTERFNT.COM) is totally revised.  Usages 2, 4-8 are
  766. added.  Usages 1 and 3 operate more or less as before (error-checking and much
  767. speed added, but Usage 1 now requires a "/g" parameter, and Usage 3 (formerly
  768. called Usage 2) takes new parameter names "c" and "o").  ALTERFNT
  769. documentation is clarified.
  770.  
  771. TEMPLATE.FNT
  772. ------------
  773. TEMPLATE.FNT is changed and improved.  As noted above, TEMPLATE.FNT is an
  774. EMPTY (PC-8 type) font containing character descriptors for every character
  775. except those reserved by Hewlett-Packard (7-15 and 27).  Hewlett-Packard deals
  776. with empty characters by skipping them:  they don't exist in the font.  I put
  777. them in TEMPLATE.FNT so it would be simple to make new characters:  you don't
  778. have to create descriptors for them, which requires work and thorough
  779. understanding (there's plenty to contend with anyway).  But the old
  780. TEMPLATE.FNT was loaded with illegal dummy characters, which worked only
  781. accidentally (my error).
  782.  
  783. The new TEMPLATE.FNT contains legal dummy characters which are not really
  784. "empty":  left offset=-1, width=1, height=1, Delta X=0, and it prints a
  785. single-dot "0" (=blank).  In other words, "empty" characters move the cursor
  786. backward 1 dot, then print a 1-dot space.  Result:  no printing and no cursor
  787. movement in sum.  This works even when printing in column 0 at left
  788. (theoretically, there's no column into which the cursor can move in response
  789. to left offset = -1, but let's not fuss:  it works).
  790.  
  791. How do you make a real space (Ascii 32)?  Two ways:  1) If you want, e.g. an
  792. 11-dot space, set width=11, height=1, top offset=0, Delta X=44, and put eleven
  793. "0"s in the bit-image: "00000000000"<cr>.  2) Delete (Usage 8) the space
  794. character (Ascii 32); on receipt of undefined characters (e.g. Ascii 32),
  795. fonts default to the Pitch (HMI) value in the Font Descriptor.  In this
  796. example, set Pitch (Usage 4) to "44".  Pitch is described in 1/4 dots, so a
  797. value of 44 yields an 11 dot space.  N.B.:  A subtle benefit of TEMPLATE.FNT
  798. is that undefined characters result in no cursor movement, whereas fonts which
  799. omit characters print an HMI space on receipt of an undefined character.
  800.  
  801. Some users have loaded TEMPLATE.FNT with characters, the font prints fine when
  802. tested, but TEMPLATE won't work with their word processor.  Probable reason:
  803. it's a PC-8 font, which is Symbol set 10U (Roman-8 is 8U).  You must configure
  804. your word processor to issue appropriate Escape sequences.  Its easy with
  805. XyWrite (no WP I've seen beats XyWrite for flexibility of all sorts), but some
  806. WPs lack XyWrite's configurability.
  807.  
  808.     Have fun!
  809.  
  810.                                *      *      *
  811.  
  812.                  ALTERFNT.COM v2.2a (c)R.J.Holmgren 10/27/88
  813.                     Voice: (212)749-7882 [5-10 PM EST/EDT]
  814.                   Messages: Sound of Music BBS (516)536-8723
  815.  
  816.   This file is provided FREE to all.  User assumes ALL risks of malfunction
  817.     or misapplication.  Copyright Holder PROHIBITS the sale or commercial
  818.       distribution of this program.  Please report bugs or suggestions.
  819.  
  820.