home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / s / sbmf13.zip / MF / MFINPUTS / MODES.MF < prev    next >
Text File  |  1992-05-15  |  48KB  |  1,312 lines

  1. % Compiled 1991, 1992 by Karl Berry from modes collected by Doug
  2. % Henderson, Pierre MacKay, and others.  This file is not copyrighted
  3. % and may be used freely.
  4. %
  5. % Please change the definitions of |localfont|, |screen_cols|, and
  6. % |screen_rows| at the end of file (see explanations below).
  7. %
  8. % When you make a new |mode_def|, please send it to {\tt
  9. % karl@cs.umb.edu}.  Please mention what fonts at what sizes you tested
  10. % it on.  This will help other people wondering where particular values
  11. % came from.  Ideally, you would try normal, bold, and italic variants,
  12. % at sizes around 5$\,$pt, 10$\,$pt and 15$\,$pt.
  13. %
  14. % You can run this file through {\tt mft} to generate a \TeX\
  15. % file, if you like reading typeset output instead of computer screens.
  16. %
  17. %%% def mode_def
  18. %%% addto font_size coding_scheme font_face_byte landscape landscape_
  19. %
  20. % @mffile{
  21. %   author = "Karl Berry, Pierre MacKay, Doug Henderson, et al."
  22. %   version = "0.10",
  23. %   date = "REPLACE-WITH-DATE"
  24. %   filename = "modes.mf",
  25. %   contact = "Karl Berry",
  26. %   email = "karl@cs.umb.edu"
  27. %   address = "135 Center Hill Rd. // Plymouth, MA 02360"
  28. %   checksum = "1311    6265   46442",
  29. %   codetable = "ISO/ASCII",
  30. %   supported = "yes",
  31. %   docstring = "
  32. %
  33. % This file collects all known \MF\ modes, some of which are untested.
  34. % It also makes definitions to put specials identifying the mode in the
  35. % \MF\ GF output, and to put the coding scheme and other so-called
  36. % Xerox-world information in the TFM output.  Finally, it defines some
  37. % code to handle write-white devices better; this code comes into play
  38. % if a |mode_def| includes the statement |mode_write_white_setup_;|.
  39. % This only works for those fonts which follow Computer Modern's
  40. % conventions for using |font_setup|.
  41. %
  42. % This file follows a naming convention that has emerged from the
  43. % discussion of |mode_def|s in {\sl TUGboat}.
  44. %
  45. % \item{1)} The print engine is identified wherever possible,
  46. %   rather than the printer which incorporates that engine.
  47. %
  48. % \item{2)} Because |mode_def| names may not contain digits,
  49. %   each digit is spelled out; e.g., {\tt RicohFourZeroEightZero}.
  50. %
  51. % \item{3)} For historical reasons, some modes have synonyms of all
  52. %   lowercase letters, e.g., `cx' for `CanonCX'.
  53. % \item{4)} All modes have at least one name which is eight or fewer
  54. %   letters, and therefore is a portable directory name.
  55. %
  56. % This file is typically loaded when making a \MF\ base; for example,
  57. % the command line 
  58. % {\tt inimf plain input modes dump} 
  59. % makes a file {\tt plain.base} (or {\tt plain.bas}, or something like
  60. % that) with all the modes herein defined (plain itself defines modes
  61. % called |proof|, |smoke|, and |lowres|.)
  62. %
  63. % You can make the Computer Modern base with:
  64. % {\tt inimf plain input modes input cmbase dump}
  65. % On Unix systems, you then install the base file in the system
  66. % directory (/usr/local/lib/mf/bases as distributed) as {\tt mf.base}.
  67. % TeX and Metafont use the name they were invoked as to determine the
  68. % format or base file to read; thus running {\tt mf} reads {\tt
  69. % mf.base}, running {\tt cmmf} reads {\tt cmmf.base}, and so on.
  70. % {\tt plain.base} and {\tt mf.base} should be the same, so the examples
  71. % in the {\sl Metafontbook} work properly.
  72. % A user selects a particular mode when s/he runs \MF, by assigning to
  73. % the variable |mode|.  For example, typing
  74. % {\tt \char`\\mode:=CanonCX; input cmr10}
  75. % sets up values appropriate for the CanonCX engine.
  76. %
  77. % If no mode is assigned, the default is |proof| mode, as stated in {\sl
  78. % The \MF book}.  This is the cause of the ``{\tt .2602gf}'' files which
  79. % are a periodic question in the \TeX\ community.  The remedy is simply
  80. % to assign a different mode---|localfont|, for example.
  81. %
  82. % Every site should define the mode |localfont| to be a synonym for the
  83. % mode most commonly used there.  This file defines |localfont| to be
  84. % |CanonCX|.  The values for |screen_rows| and |screen_cols|, which
  85. % determine how big \MF's window for online output is, should perhaps
  86. % also be changed; individual users should certainly change them to
  87. % their own tastes.
  88. %
  89. % This file defines {\tt ?} to type out a list of all the known
  90. % |mode_def|s (once only).
  91. %
  92. % A |mode_def| is a \MF\ definition that typically consists of a series
  93. % of assignments to various device-specific variables, either primitive
  94. % or defined in plain.  These variables include the following (page
  95. % numbers refer to {\sl The \MF book\/}:
  96. %
  97. % |aspect_ratio|: the ratio of the vertical resolution to the horizontal
  98. %   resolution (page 94).
  99. %
  100. % |blacker|: a correction added to the width of stems and similar
  101. %   features, to account for devices which would otherwise make them too
  102. %   light (page 93).  (Write-white devices are best handled by a more
  103. %   sophisticated method than adding to |blacker|, as explained above.)
  104. %
  105. % |fillin|: a correction factor for diagonals and other features which
  106. %   would otherwise be ``filled in'' (page 94).  An ideal device would
  107. %   have |fillin=0| (page 94).  Negative values for |fillin| will
  108. %   probably either gross effects or none at all.
  109. %
  110. % |fontmaking|: if nonzero at the end of the job, \MF\ makes a TFM file
  111. %   (page 315).
  112. %
  113. % |o_correction|: a correction factor for the ``overshoot'' of curves
  114. %   beyond the baseline (or x-height, or some other line).  High
  115. %   resolution curves look better with overshoot, so such devices should
  116. %   have |o_correction=1|; but at low resolutions, the overshoot appears
  117. %   to simply be a distortion (page 93).  Here some additional comments
  118. %   about |o_correction|, courtesy of Pierre MacKay (edited by Karl):
  119. %
  120. %   At present, I find that |o_correction| works nicely at 80 pixels per
  121. %   em, and gets increasingly disturbing as you move down towards 50
  122. %   pixels per em. Below that I do not think it ought to happen at all.
  123. %
  124. %   The problem, of course, is that full |o_correction| is supposed to
  125. %   occur only at the zenith and nadir of the curve of `o', which is a
  126. %   small region at high resolution, but may be a long line of
  127. %   horizontal pixels at medium resolution.  The full |o_correction|
  128. %   does not change a 300$\,$dpi {\tt cmr10}, but it changes a 21-pixel
  129. %   high {\tt cmr12} to be 23 pixels high.  The extra height and depth
  130. %   is seen along a line of seven pixels at the bottom and five at the
  131. %   top.  This is a pronounced overshoot indeed.
  132. %
  133. %   For high-resolution devices, such as phototypesetters, the values
  134. %   for |blacker|, |fillin|, and |o_correction| don't matter all that
  135. %   much, so long as the values are within their normal ranges: between
  136. %   0 and 1, with the values approaching 0, 0, and 1 respectively.
  137. %
  138. % |pixels_per_inch|: the horizontal resolution; the \MF\ primitive
  139. %   |hppp| (which is what determines the extension on the GF filename,
  140. %   as among other things) is computed from this (page 94).  (An
  141. %   ``inch'' is 72.27\thinspace pt in the \TeX\ world.)
  142. %
  143. %   To be more precise, you can determine the resolution of a font given
  144. %   a |mode_def| and a magnification |m| by simply multiplying
  145. %   |pixels_per_inch| for that |mode_def| by |m|.  (Of course, your
  146. %   results may differ from \MF's if you don't use equivalent
  147. %   fixed-point arithmetic routines.)  Then you can determine the number
  148. %   used in the name of the GF font output by rounding.  For example, a
  149. %   font generated at |magstep(.5)| (which is $\sqrt{1.2}$, which \MF
  150. %   computes as 1.09544) for a printer with |pixels_per_inch=300| will
  151. %   have a resolution of 328.63312 dots per inch, and the GF filename
  152. %   will include the number {\tt 329}.
  153. %
  154. % |proofing|: says whether to put additional specials in the GF file for
  155. %   use in making proofsheets with the assistance of, e.g., the utility
  156. %   program {\tt GFtoDVI} (page 323--4).
  157. %
  158. % |tracingtitles|: if nonzero, strings that appear as \MF\ statements
  159. %   are typed on the terminal (page 187).
  160. %
  161. % Neenie Billawala's article in the April 1987 issue of {\sl TUGboat}
  162. % describes how to test your printer for the best set of values for the
  163. % magic numbers above.  Here are some brief comments on the subject,
  164. % courtesy of {\tt rocky@watson.ibm.com}, again edited by Karl:
  165. %
  166. % For medium-to-low resolution devices, you can first set the |blacker|
  167. % and |o_correction| to~0 and decide on a |fillin| value by looking at
  168. % the diagonal of a lowercase `z' in the typewriter font, or various
  169. % lines in LaTeX's line10 font. The diagonal should be the same
  170. % thickness as the horizontal bars of the `z'. Then I decide on the
  171. % |blacker| value, generally by checking the smaller fonts for too much
  172. % filling in.  Finally, you can set the |o_correction| using the
  173. % guidelines suggested above.
  174. %"
  175. % }
  176.  
  177. % Identify ourselves in the format file.
  178. base_version := base_version & "/modes 0.10";
  179.  
  180.  
  181. % Here are useful macros (also called definitions) that we will use
  182. % throughout.
  183.  
  184. % First, some comments about how the |mode_defs| are constructed (from
  185. % {\tt rocky@watson.ibm.com}).  In the past, |mode_defs| unconditionally
  186. % assigned a value to the various mode-dependent parameters. For
  187. % example, they contained an assignment |fontmaking:=1|, which tells
  188. % \MF\ to write a TFM file.
  189. %
  190. % But suppose you want to generate a font using all of the setup for
  191. % some mode |m|, but do not want to generate a TFM? One could create
  192. % another mode that doesn't have the assignment, but this seems a bit
  193. % wasteful since the rest of the code in the mode would be duplicated.
  194. % Furthermore, given the way the mode definitions were written, it was
  195. % not possible to change the mode parameters.  To see why, I review how
  196. % a \MF\ run typically works.
  197. %
  198. % First, \MF\ is invoked with some base file to load.  Then you might
  199. % want give additional instructions, such as |scrollmode|, or |mode:=m|.
  200. % Next, you input a parameter file, say {\tt cmr10}.  The parameter file
  201. % calls a driver file, such as {\tt roman}, with the command |generate
  202. % roman|.  Finally, the driver finished by saying |bye| or |end|.  Thus,
  203. % any additional commands you give after the input of the parameter file
  204. % are ignored.
  205. %
  206. % Usually, one of the first things a driver file does is to call
  207. % |mode_setup|. It is here that the mode parameters are set.  (In our
  208. % hypothetical mode, it would be here that |fontmaking| is assigned.)
  209. %
  210. % To allow a flexible setting of |fontmaking|, we can make a simple
  211. % change: in the |mode_def|, first test to see if a value has been
  212. % defined prior and only make the assignment if not. That is:
  213. % |if unknown fontmaking: fontmaking := 1; fi|.
  214. %
  215. % Alas, this doesn't work.  Primitives, like |fontmaking|, are always
  216. % |known|.  So instead we create ``guard'' variables, e.g.,
  217. % |mode_guard_.fontmaking|; we set the guard variable when we assign the
  218. % parameter.  Then we test whether the guard variable is |known| before
  219. % we actually do an assignment.
  220. % This allows more flexible definitions: you can specify some of the
  221. % parameters, and keep the default value for others.
  222. %
  223. % It is also possible to write a program that creates a |mode_def| on
  224. % the fly. Although useful, this has a slightly different focus than
  225. % starting with an existing |mode_def| and changing a couple of
  226. % parameters. In particular, one still has to peek inside the
  227. % file to see what the old values were and set them again (in the
  228. % new context). Also, such on-the-fly |mode_def| generation programs are
  229. % inherently less machine-independent that a scheme that does
  230. % everything in \MF\ itself.
  231. %
  232. % The upshot of all this is the following definition: we say, e.g.,
  233. % |mode_param (fontmaking, 1)| below, instead of doing a real
  234. % assignment.  The name (``|mode_param|'') is kept somewhat short
  235. % because you also use this to override a mode assignment, on the
  236. % command line or in response to the {\tt **} prompt.
  237. def mode_param (suffix v) (expr e) =
  238.   if unknown mode_guard_.v:
  239.     v := e;
  240.     mode_guard_.v := 1;
  241.   fi
  242. enddef;
  243.  
  244. % This macro is invoked by all the modes, after |pixels_per_inch|
  245. % has been defined, thus saving some space and time.
  246. def mode_common_setup_ =
  247.   mode_param (proofing, 0);
  248.   mode_param (fontmaking, 1);
  249.   mode_param (tracingtitles, if pixels_per_inch > 700: 1 else: 0 fi);
  250. enddef;
  251.  
  252.  
  253. % In a similar spirit, here are definitions to change to ``landscape''
  254. % mode.  You just say {\tt mode := whatever; landscape; ...}, and when
  255. % |mode_setup| is executed, the |aspect_ratio| will be inverted, and
  256. % |pixels_per_inch| changed.
  257. def landscape =
  258.   extra_setup := extra_setup & "landscape_;"
  259. enddef;
  260.  
  261. def landscape_ =
  262.   begingroup
  263.     interim warningcheck := 0;
  264.     pixels_per_inch := aspect_ratio * pixels_per_inch;
  265.     aspect_ratio := 1 / aspect_ratio;
  266.     fix_units; % Too bad we can't do this after any |extra_setup|.
  267.   endgroup
  268. enddef;
  269.  
  270.  
  271. % Here are macros to add specials with mode information to the GF file.
  272. %
  273. % Specifically, we add the |pixels_per_inch|, |o_correction|,
  274. % |aspect_ratio| (if not 1), |mag|, |fillin|, and |mode_def| name.  This
  275. % information can be used to automatically verify that a font file name
  276. % matches the specification within the file.  For example, you could
  277. % check that the number in the filename matches |mag*pixels_per_inch|.
  278. % Or, if the |mode_def| name is is put in the font directory path (e.g.,
  279. % you put fonts in {\tt $\ldots$/tex/fonts/CanonCX}), that all of the
  280. % bitmap files in the directory have the expected |mode_def| name.
  281.  
  282. def mode_special_ (suffix $) =
  283.   string s, d;
  284.   s := str $;
  285.   d := decimal scantokens s;
  286.   special s & "=" & d;
  287. enddef;
  288.  
  289. def mode_output_specials_ =
  290.   begingroup
  291.     save d, s, p, p_p_i;
  292.     string p;
  293.  
  294.     interim warningcheck := 0; % In case |pixels_per_inch>4096|.
  295.  
  296.     % We need the old |pixels_per_inch| to compute the true device
  297.     % resolution.
  298.     p_p_i = pixels_per_inch / mag;
  299.  
  300.     % But now we want to change |pixels_per_inch|, so we |save| the
  301.     % old value.
  302.     save pixels_per_inch;
  303.     pixels_per_inch := p_p_i;
  304.  
  305.     special jobname;
  306.     mode_special_ (mag);
  307.  
  308.     p := if string mode:
  309.            mode
  310.          else:
  311.            substring (0, length (mode_name[mode]) - 1) of mode_name[mode]
  312.          fi;
  313.     special "mode=" & p & ";";
  314.  
  315.     mode_special_ (pixels_per_inch);
  316.     if aspect_ratio <> 1:
  317.       mode_special_ (aspect_ratio);
  318.     fi;
  319.     mode_special_ (blacker);
  320.     mode_special_ (fillin);
  321.     mode_special_ (o_correction);
  322.   endgroup
  323. enddef;
  324.  
  325.  
  326. % Here are macros for Xerox-world font info, which can be useful even
  327. % if you never use a Xerox printer.  For instance, {\tt crudetype} uses
  328. % the |coding_scheme| and it is nice to have the font family on record.
  329. % This goes into both the TFM file (as |headerbyte| information), and
  330. % into the GF file (as a |special|).
  331.  
  332. % Make the string |s| be |n| bytes long.
  333. def BCPL_string (expr s, n) =
  334.   for l := if length (s) >= n: n-1 else: length (s) fi: l
  335.     for k := 1 upto l: , substring (k - 1, k) of s endfor
  336.     for k := l + 2 upto n: , 0 endfor
  337.   endfor
  338. enddef;
  339.  
  340. % The string |s| names the encoding scheme, e.g., {\tt TeX text}.
  341. def coding_scheme expr s =
  342.   headerbyte 9: BCPL_string (s, 40);
  343.   special "codingscheme " & s
  344. enddef;
  345.  
  346. % The string |s| names the font family, e.g., {\tt CMR}.
  347. def font_family expr s =
  348.   headerbyte 49: BCPL_string (s, 20);
  349.   special "identifier " & s
  350. enddef;
  351.  
  352. % The integer |x| gives the family member number, which should be
  353. % between 0 and 255.
  354. def font_face_byte expr x =
  355.   headerbyte 72: x;
  356.   special "fontfacebyte";
  357.   numspecial x
  358. enddef;
  359.  
  360. % So users can say |if known Xerox_world: $\ldots$ fi|
  361. Xerox_world := 1;
  362.  
  363.  
  364. % Redefine |end| to put the extra information above in the GF and TFM
  365. % files.  This code is based on that on page 321.
  366. inner end;
  367. let primitive_end_ = end;
  368. def end =
  369.   if fontmaking > 0:
  370.     font_family font_identifier_;
  371.     coding_scheme font_coding_scheme_;
  372.     font_face_byte max (0, 254 - round 2designsize);
  373.     mode_output_specials_;
  374.   fi;
  375.   primitive_end_.
  376. enddef;
  377.  
  378. % The {\sl \MF book} gives |bye| two different definitions (on pages 278
  379. % and 321). The first is used in {\tt plain.mf} and is merely a synoynym
  380. % for the primitive |end|.  The second, which is not part of {\tt
  381. % plain.mf}, is similar to the code given above. We want the extra
  382. % information to get into the output files regardless of whether the
  383. % \MF\ source used |end| or |bye|.  The above changed |end|; now we have
  384. % to redefine |bye| again (as on page 278).
  385. outer end, primitive_end_;
  386. let bye = end;
  387.  
  388.  
  389. % Here are macros to handle write-white printers.
  390. %
  391. % The basic correction for write-white fonts occurs in the definition of
  392. % |font_setup|.  This can be used to extend or change the write-black
  393. % definition in Computer Modern's {\tt cmbase.mf} or other base files
  394. % based on CM, such as {\tt dxbase.mf}.
  395. %
  396. def mode_write_white_setup_ =
  397.   begingroup
  398.     let black_setup = font_setup;
  399.     def font_setup =
  400.       black_setup;
  401.       min_Vround:=max(fine.breadth,crisp.breadth,tiny.breadth,2);
  402.       if min_Vround<vround min_Vround: min_Vround:=vround min_Vround; fi
  403.       if flare<vround flare: flare:=vround flare; fi
  404.       forsuffixes $=vair,bar,slab,cap_bar,cap_band,vair',vstem,cap_vstem,bold:
  405.         if $<min_Vround: $:=min_Vround; fi endfor
  406.       forsuffixes $=thin_join,hair,curve,flare,dot_size,cap_hair,cap_curve,
  407.        vair,bar,slab,cap_bar,cap_band,stem',cap_stem',vair',fudged.hair,
  408.        fudged.stem,fudged.cap_stem: $:=max($,2); endfor
  409.     enddef;
  410.   endgroup;
  411.   % Only do the above once, in case a font file (unnecessarily) calls
  412.   % |mode_setup| more than once.
  413.   let mode_write_white_setup_ = relax
  414. enddef;
  415.  
  416.  
  417. % Here are the modes, given in alphabetical order (without regard to case).
  418.  
  419. % From {\tt cudat@cu.warwick.ac.uk}.
  420. mode_def AgfaFourZeroZero =             % AGFA 400PS
  421.   mode_param (pixels_per_inch, 406);
  422.   mode_param (blacker, .2);
  423.   mode_param (fillin, 0);
  424.   mode_param (o_correction, .6);
  425.   mode_common_setup_;
  426. enddef;
  427.  
  428. % From {\tt rokicki@neon.stanford.edu}.
  429. mode_def amiga =                        % Commodore Amiga
  430.   mode_param (pixels_per_inch, 100);
  431.   mode_param (blacker, 0);
  432.   mode_param (fillin, 0);
  433.   mode_param (o_correction, .2);
  434.   mode_common_setup_;
  435. enddef;
  436.  
  437. % From {\tt W.Spit@fys.ruu.nl}.  {\tt N.Poppelier@elsevier.nl} says that
  438. % different previewers use different resolutions (95 dpi, 96 dpi, or 101
  439. % dpi), but no one seems to know what the real resolution is.
  440. mode_def AtariNineFive =                % Atari 95dpi previewer
  441.   mode_param (pixels_per_inch, 95);
  442.   mode_param (blacker, 0);
  443.   mode_param (fillin, 0);
  444.   mode_param (o_correction, 0.1);
  445.   mode_common_setup_;
  446. enddef;
  447.  
  448. mode_def AtariNineSix =                 % Atari 96x96 previewer
  449.   mode_param (pixels_per_inch, 96);
  450.   mode_param (blacker, 0);
  451.   mode_param (fillin, 0);
  452.   mode_param (o_correction, 0.1);
  453.   mode_common_setup_;
  454. enddef;
  455.  
  456. % From {\tt ee@dacth51.bitnet}.
  457. mode_def AtariSLMEightZeroFour =        % Atari ST SLM 804 printer
  458.   mode_param (pixels_per_inch, 300);
  459.   mode_param (blacker, -.25);
  460.   mode_param (fillin, .5);
  461.   mode_param (o_correction, 0);
  462.   mode_common_setup_;
  463.   mode_write_white_setup_;
  464. enddef;
  465.  
  466. % From {\tt ee@dacth51.bitnet}.
  467. mode_def AtariSMOneTwoFour =            % Atari ST SM 124 screen
  468.   mode_param (pixels_per_inch, 101);
  469.   mode_param (blacker, 0);
  470.   mode_param (fillin, 0);
  471.   mode_param (o_correction, .4);
  472.   mode_common_setup_;
  473. enddef;
  474.  
  475. mode_def aps =                          % Autologic APS-Micro5
  476.   mode_param (pixels_per_inch, 722.909);
  477.   mode_param (blacker, .2);
  478.   mode_param (fillin, .2);
  479.   mode_param (o_correction, 1);
  480.   mode_common_setup_;
  481. enddef;
  482.  
  483. % From {\tt rocky@watson.ibm.com}.  Tested on the single APS-6 at IBM
  484. % Research.
  485. mode_def ApsSixHi =                     % Autologic APS-Micro6
  486.   mode_param (pixels_per_inch, 1016);
  487.   mode_param (blacker, 0);
  488.   mode_param (fillin, 0);
  489.   mode_param (o_correction, 1);
  490.   mode_common_setup_;
  491. enddef;
  492.  
  493. mode_def bitgraph =                     % BBN Bitgraph at 118dpi
  494.   mode_param (pixels_per_inch, 118);
  495.   mode_param (blacker, .55);
  496.   mode_param (fillin, .1);
  497.   mode_param (o_correction, .3);
  498.   mode_common_setup_;
  499. enddef;
  500.  
  501. mode_def boise =                        % HP 2680A
  502.   mode_param (pixels_per_inch, 180);
  503.   mode_param (blacker, .55);
  504.   mode_param (fillin, .1);
  505.   mode_param (o_correction, .3);
  506.   mode_common_setup_;
  507. enddef;
  508.  
  509. % This applies to the LaserWriter Plus, HP Laserjet, HP Laserjet Plus,
  510. % and also the Canon LBP-LX engine, in the Laserjet IIP, QMS 410, and
  511. % Apple Personal LaserWriter, and also to the CanonSX engine, in the
  512. % LaserWriter II family.
  513. mode_def CanonCX =                      % Canon CX, SX, LBP-LX
  514.   mode_param (pixels_per_inch, 300);
  515.   mode_param (blacker, 0);
  516.   mode_param (fillin, .2);
  517.   mode_param (o_correction, .6);
  518.   mode_common_setup_;
  519. enddef;
  520. cx := CanonCX;
  521. corona := CanonCX;
  522. dp := CanonCX; % some kind of DataProducts
  523. hplaser := CanonCX;
  524. imagen := CanonCX;
  525. kyocera := CanonCX;
  526. laserwriter := CanonCX;
  527. % I have seen a |mode_def| that claimed the LaserJet II was the Canon SX
  528. % write-white engine, but I don't think that's right.
  529. laserjethi := CanonCX;
  530. laserjet := CanonCX;
  531. % {\tt ogawa@orion.arc.nasa.gov} says that this is definitely not a
  532. % write-white engine, despite earlier versions of this file claiming the
  533. % contrary.  Thus, probably the same parameters as |CanonCX| will do.
  534. CanonSX := CanonCX;
  535. CanonLBPLX := CanonCX;
  536.  
  537. mode_def CanonLBPTen =                  % e.g., Symbolics LGP-10
  538.   mode_param (pixels_per_inch, 240);
  539.   mode_param (blacker, .2);
  540.   mode_param (fillin, .2);
  541.   mode_param (o_correction, .4);
  542.   mode_common_setup_;
  543. enddef;
  544.  
  545.  
  546. % The Chelgraph IBX is the machine introduced to North American \TeX\
  547. % users by Type~2000 in Mill Valley, California; telephone
  548. % (415)~388-8873.  Since the machine's stated output resolution is only
  549. % 2000\thinspace dpi this truly spectacular 9600\thinspace dpi must be
  550. % used for translation to an outline font description.  This
  551. % |mode_def| has been tested and used in a publication of the University
  552. % of Washington Press.  These values from Pierre MacKay, based on Lance
  553. % Carnes' crs values, at magstep~1.8.
  554. mode_def ChelgraphIBX =                 % Chelgraph IBX
  555.   mode_param (pixels_per_inch, 4000 + 4000 + 1600);
  556.   mode_param (blacker, 4);
  557.   mode_param (fillin, 0);
  558.   mode_param (o_correction, 1);
  559.   mode_common_setup_;
  560. enddef;
  561.  
  562. % From {\tt rokicki@cs.umb.edu}.
  563. mode_def CItohThreeOneZero =            % CItoh 310
  564.   mode_param (pixels_per_inch, 240);
  565.   mode_param (aspect_ratio, 144 / pixels_per_inch);
  566.   mode_param (blacker, 0);
  567.   mode_param (fillin, 0);
  568.   mode_param (o_correction, .2);
  569.   mode_common_setup_;
  570. enddef;
  571. cthreeten := CItohThreeOneZero;
  572.  
  573. % From {\tt local.mf} via {\tt cudat@cu.warwick.ac.uk}.
  574. mode_def CItohEightFiveOneZero =        % CItoh 8510A
  575.   mode_param (pixels_per_inch, 160);
  576.   mode_param (aspect_ratio, 144 / pixels_per_inch);
  577.   mode_param (blacker, 0);
  578.   mode_param (fillin, 0);
  579.   mode_param (o_correction, .1);
  580.   mode_common_setup_;
  581. enddef;
  582. itoh := CItohEightFiveOneZero;
  583.  
  584. mode_def CompugraphicEightSixZeroZero = % Compugraphic 8600
  585.   mode_param (pixels_per_inch, 1301.5);
  586.   mode_param (aspect_ratio, 1569 / pixels_per_inch);
  587.   mode_param (blacker, .2);
  588.   mode_param (fillin, .2);
  589.   mode_param (o_correction, 1);
  590.   mode_common_setup_;
  591. enddef;
  592. cg := CompugraphicEightSixZeroZero;
  593.  
  594. % These values from Linotype Linotronic [13]00 modified to 1200dpi.
  595. % From {\tt wagman\%muse.hepnet@Csa2.LBL.Gov}.
  596. mode_def CompugraphicNineSixZeroZero =  % Compugraphic 9600
  597.   mode_param (pixels_per_inch, 1200);
  598.   mode_param (blacker, .65);
  599.   mode_param (fillin, -.1);
  600.   mode_param (o_correction, .5);
  601.   mode_common_setup_;
  602.   mode_write_white_setup_;
  603. enddef;
  604.  
  605. % This has a resolution of |5333 + 1/3| pixels per inch.
  606. mode_def crs =                          % Alphatype CRS
  607.   mode_param (pixels_per_inch, 4000 + 4000/3);
  608.   mode_param (blacker, 4);
  609.   mode_param (fillin, 0);
  610.   mode_param (o_correction, 1);
  611.   mode_common_setup_;
  612. enddef;
  613.  
  614. % At least magstep 2 is recommended at this low resolution.
  615. mode_def DataDisc =                     % DataDisc
  616.   mode_param (pixels_per_inch, 70);
  617.   mode_param (blacker, 0);
  618.   mode_param (fillin, 0);
  619.   mode_param (o_correction, .2);
  620.   mode_common_setup_;
  621. enddef;
  622. DD := DataDisc;
  623.  
  624. mode_def DataDiscNew =                  % DataDisc with special aspect ratio
  625.   mode_param (aspect_ratio, 4/3);
  626.   DataDisc_;
  627. enddef;
  628. newDD := DataDiscNew;
  629.  
  630. mode_def dover =                        % Xerox Dover
  631.   mode_param (pixels_per_inch, 384);
  632.   mode_param (blacker, 1.2);
  633.   mode_param (fillin, 0);
  634.   mode_param (o_correction, .6);
  635.   mode_common_setup_;
  636. enddef;
  637.  
  638. % Perhaps this should be 120 horizontally and 216 vertically, if it is
  639. % for the MX-80.
  640. mode_def epsonlo =                      % Epson at 120dpi
  641.   mode_param (pixels_per_inch, 120);
  642.   mode_param (aspect_ratio, 144 / pixels_per_inch);
  643.   EpsonMXFX_;
  644. enddef;
  645. epslo := epsonlo;
  646.  
  647. % This and |EpsonLQFiveZeroZeroLo| also work for a Mannesmann 300 (from
  648. % {\tt cudat@csv.warwick.ac.uk}, 4 September 1991).  The $360\times360$
  649. % modes for these printers fails for {\tt cudat}, however.
  650. mode_def EpsonLQFiveZeroZeroMed =       % Epson LQ-500, 360x180dpi
  651.   mode_param (pixels_per_inch, 360);
  652.   mode_param (aspect_ratio, 180 / pixels_per_inch);
  653.   mode_param (blacker, 0); % 0.3 avoids `holes'.
  654.   mode_param (fillin, 0);
  655.   mode_param (o_correction, .1);
  656.   mode_common_setup_;
  657. enddef;
  658. lqmedres := EpsonLQFiveZeroZeroMed;
  659.  
  660. mode_def EpsonLQFiveZeroZeroLo =        % Epson LQ-500, 180x180dpi
  661.   mode_param (pixels_per_inch, 180);
  662.   mode_param (blacker, 0);
  663.   mode_param (fillin, 0);
  664.   mode_param (o_correction, .1);
  665.   mode_common_setup_;
  666. enddef;
  667. lqlores := EpsonLQFiveZeroZeroLo;
  668.  
  669. % These values from Charles Karney, {\sl TUGboat} 8(2), page 133.  This
  670. % is for the Epson MX/FX family (-85, -286), which are 9-pin printers.
  671. % The 24-pin LQ family have higher resolutions; no one has sent me
  672. % |mode_def|s for them yet.  Ditto for Epson's laser printer.  (Thanks
  673. % to {\tt cargo@escargot.cray.com} for all this information.)
  674. mode_def EpsonMXFX =                    % 9-pin Epson MX/FX family
  675.   mode_param (pixels_per_inch, 240);
  676.   mode_param (aspect_ratio, 216 / pixels_per_inch);
  677.   mode_param (blacker, 0);
  678.   mode_param (fillin, 0);
  679.   mode_param (o_correction, .2);
  680.   mode_common_setup_;
  681. enddef;
  682. epson := EpsonMXFX;
  683. epshi := EpsonMXFX;
  684. epsonfx := EpsonMXFX;
  685.  
  686. % From {\tt drstrip@intvax.uucp}.
  687. mode_def GThreefax =                    % 200 x 100dpi G3fax
  688.   mode_param (pixels_per_inch, 200);
  689.   mode_param (aspect_ratio, 100 / pixels_per_inch);
  690.   mode_param (blacker, 0);
  691.   mode_param (fillin, .2);
  692.   mode_param (o_correction, .2);
  693.   mode_common_setup_;
  694. enddef;
  695.  
  696. % From {\tt fieberjr@whitman.bitnet}.
  697. mode_def HPDeskJet =                    % HP DeskJet 500
  698.   mode_param (pixels_per_inch, 300);
  699.   mode_param (blacker, 0);
  700.   mode_param (fillin, 0);
  701.   mode_param (o_correction, .6);
  702.   mode_common_setup_;
  703. enddef;
  704.  
  705. % Here are some general comments on the IBM printers, courtesy of {\tt
  706. % rocky@watson.ibm.com}.
  707. %
  708. % IBM 3820's, 3825's, 3827's and 3835's have some sort of corner imaging
  709. % or shading that the IBM 3812's and 3816's don't.  The latter two
  710. % models may get this feature in the future.
  711. %
  712. % The IBM 3827 is made by Kodak, the rest are IBM engines.
  713. %
  714. % Some of the other printers have a knob that allows a service engineer
  715. % to set one of up to ten levels of darkness.  At IBM Research, we run
  716. % very black.  The service engineer sets the level by running a
  717. % completely black page and then two completely blank ones. The black
  718. % page must be black and the following two must be completely white.
  719. %
  720. % Thanks to Jim Hafner ({\tt hafner@ibm.com}) for experimenting with
  721. % |blacker|, and Paul Dantzig for information about these printers.
  722.  
  723. % From {\tt ARNALDO@RIOSC.bitnet}.  This is for the 3820, but can be
  724. % used for 3812, 3816, 3825, 3837 3800 and 3827 printers (these are all
  725. % 240 pels IBM printers that use the same font format when driven by
  726. % PSF/VM).
  727. mode_def ibm_a =                        % IBM 38xx (\#1)
  728.   mode_param (pixels_per_inch, 240);
  729.   mode_param (blacker, .35);
  730.   mode_param (fillin, -.2);
  731.   mode_param (o_correction, .2);
  732.   mode_common_setup_;
  733. enddef;
  734.  
  735. % From {\tt rocky@watson.ibm.com}.  For the typewriter, slanted, and
  736. % italic fonts, |blacker=0| makes the `M's and `W's more legible.  But
  737. % then the weight of the font does not match the others.
  738. mode_def IBMD =                         % IBM 38xx (\#2)
  739.   mode_param (pixels_per_inch, 240);
  740.   mode_param (blacker, .3);
  741.   mode_param (fillin, .4);
  742.   mode_param (o_correction, .75);
  743.   mode_common_setup_;
  744. enddef;
  745.  
  746. % From {\tt vumalki\%weizmann.weizmann.ac.il@taunivm.tau.ac.il} and {\tt
  747. % plotkin@theory.stanford.edu}.
  748. mode_def IBMFourZeroTwoNine =           % IBM 4029-30, 4250
  749.   mode_param (pixels_per_inch, 600);
  750.   mode_param (blacker, .05);
  751.   mode_param (fillin, 0);
  752.   mode_param (o_correction, .75);
  753.   mode_common_setup_;
  754. enddef;
  755. IBMFourTwoThreeZero := IBMFourZeroTwoNine;
  756. IBMFourTwoFiveZero := IBMFourZeroTwoNine;
  757.  
  758. % From {\tt Martin.Ward@durham.ac.uk}.  Apparently the engine is
  759. % different from the Ricoh 4080.  With a larger value of |blacker|,
  760. % characters like the `e' in {\tt cmtt8} look bad.
  761. mode_def IBMFourTwoOneSix =             % IBM 4216
  762.   mode_param (pixels_per_inch, 300);
  763.   mode_param (blacker, .2);
  764.   mode_param (fillin, 0);
  765.   mode_param (o_correction, .75);
  766.   mode_common_setup_;
  767.   mode_write_white_setup_;
  768. enddef;
  769. RicohA := IBMFourTwoOneSix;
  770.  
  771. % From Rick Simpson via {\tt erikjan@icce.rug.nl}.
  772. mode_def IBMProPrinter =                % IBM ProPrinter
  773.   mode_param (pixels_per_inch, 240);
  774.   mode_param (aspect_ratio, 216 / pixels_per_inch);
  775.   mode_param (blacker, 0);
  776.   mode_param (fillin, .2);
  777.   mode_param (o_correction, 1);
  778.   mode_common_setup_;
  779. enddef;
  780. proprinter := IBMProPrinter;
  781.  
  782. % From Rick Simpson via {\tt erikjan@icce.rug.nl}.  Also gave values of
  783. % zero for |blacker|, |fillin|, and |o_correction|.
  784. mode_def IBMSixOneFiveFour =            % IBM 6154 display
  785.   mode_param (pixels_per_inch, 118);
  786.   mode_param (blacker, .8);
  787.   mode_param (fillin, .2);
  788.   mode_param (o_correction, 1);
  789.   mode_common_setup_;
  790. enddef;
  791.  
  792. % From {\tt rocky@watson.ibm.com}.  This is an old, untested definition.
  793. mode_def IBMSixSixSevenZero =           % IBM 6670 (Sherpa)
  794.   mode_param (pixels_per_inch, 240);
  795.   mode_param (blacker, 1);
  796.   mode_param (fillin, 1);
  797.   mode_param (o_correction, .5);
  798.   mode_common_setup_;
  799.   mode_write_white_setup_;
  800. enddef;
  801. Sherpa := IBMSixSixSevenZero;
  802.  
  803. % From {\tt x92@vm.urz-uni-heidelberg.de} via {\tt schoepf@sc.zib-berlin.de}.
  804. mode_def IBMThreeOneSevenNine =         % IBM 3179 screen
  805.   mode_param (pixels_per_inch, 87);
  806.   mode_param (aspect_ratio, 0.75);
  807.   mode_param (blacker, 0);
  808.   mode_param (fillin, 0);
  809.   mode_param (o_correction, 0);
  810.   mode_common_setup_;
  811. enddef;
  812.  
  813. % From {\tt x92@vm.urz-uni-heidelberg.de} via {\tt schoepf@sc.zib-berlin.de}.
  814. mode_def IBMThreeOneNineThree =         % IBM 3193 screen
  815.   mode_param (pixels_per_inch, 100);
  816.   mode_param (blacker, 0);
  817.   mode_param (fillin, 0);
  818.   mode_param (o_correction, 0);
  819.   mode_common_setup_;
  820. enddef;
  821.  
  822. % From {\tt vumalki\%weizmann.weizmann.ac.il@taunivm.tau.ac.il}.
  823. mode_def IBMThreeEightOneTwo =          % IBM 3812
  824.   mode_param (pixels_per_inch, 240);
  825.   mode_param (blacker, .6);
  826.   mode_param (fillin, .4);
  827.   mode_param (o_correction, 0);
  828.   mode_common_setup_;
  829.   mode_write_white_setup_;
  830. enddef;
  831. IBMUlfHolleberg := IBMThreeEightOneTwo;
  832.  
  833. % These values from {\tt d\_webb@chcc.harwell.aea-technology.uk}.
  834. mode_def IBMThreeEightTwoZero =         % IBM 3820
  835.   mode_param (pixels_per_inch, 240);
  836.   mode_param (blacker, .78);
  837.   mode_param (fillin, .25);
  838.   mode_param (o_correction, .5);
  839.   mode_common_setup_;
  840. enddef;
  841.  
  842. % These values from {\tt melvin@math.psu.edu}.
  843. mode_def IBMEGA =                       % IBM EGA monitor
  844.   mode_param (pixels_per_inch, 96);
  845.   mode_param (aspect_ratio, .841);
  846.   mode_param (blacker, .3);
  847.   mode_param (fillin, 0);
  848.   mode_param (o_correction, 0);
  849.   mode_common_setup_;
  850. enddef;
  851.  
  852. % These values from {\tt d\_webb@chcc.harwell.aea-technology.uk}.
  853. % {\tt melvin@math.psu.edu} thinks |pixels_per_inch=96| might be better.
  854. mode_def IBMVGA =                       % IBM VGA monitor
  855.   mode_param (pixels_per_inch, 110);
  856.   mode_param (blacker, .3);
  857.   mode_param (fillin, 0);
  858.   mode_param (o_correction, 0);
  859.   mode_common_setup_;
  860. enddef;
  861.  
  862. % Perhaps the value for |fillin| should be 0.
  863. mode_def imagewriter =                  % Apple ImageWriter
  864.   mode_param (pixels_per_inch, 144);
  865.   mode_param (blacker, 0);
  866.   mode_param (fillin, 0.3);
  867.   mode_param (o_correction, .2);
  868.   mode_common_setup_;
  869. enddef;
  870. iw := imagewriter;
  871.  
  872. % From {\tt ST-TeX.MF} via {\tt braams@pttrnl.nl}.  (The 300dpi LaserJet
  873. % is another |CanonCX|.)
  874. mode_def laserjetlo =                   % HP LaserJet at 150dpi
  875.   mode_param (pixels_per_inch, 150);
  876.   mode_param (blacker, 0);
  877.   mode_param (fillin, .1);
  878.   mode_param (o_correction, 1);
  879.   mode_common_setup_;
  880. enddef;
  881.  
  882. % From John Sauter.
  883. mode_def LASevenFive =                  % DEC LA75
  884.   mode_param (pixels_per_inch, 144);
  885.   mode_param (blacker, .3);
  886.   mode_param (fillin, -.1);
  887.   mode_param (o_correction, 0);
  888.   mode_common_setup_;
  889. enddef;
  890.  
  891. mode_def LinotypeOneZeroZeroLo =        % Linotype Linotronic [13]00 at 635dpi
  892.   mode_param (pixels_per_inch, 635);
  893.   LinotypeOneZeroZero_;
  894. enddef;
  895. linolo := LinotypeOneZeroZeroLo;
  896. linohalf := LinotypeOneZeroZeroLo;
  897.  
  898. % These values from {\tt d\_webb@chcc.harwell.aea-technology.uk}.  The
  899. % `a' in {\tt cmr5} looks better with |blacker=.3|.  Values of .2 for
  900. % both |blacker| and |fillin| have also been used.
  901. mode_def LinotypeOneZeroZero =          % Linotype Linotronic [13]00 at 1270dpi
  902.   mode_param (pixels_per_inch, 1270);
  903.   mode_param (blacker, .65);
  904.   mode_param (o_correction, 1);
  905.   mode_param (fillin, -.1);
  906.   mode_common_setup_;
  907.   mode_write_white_setup_;
  908. enddef;
  909. linoone := LinotypeOneZeroZero;
  910. linohi := LinotypeOneZeroZero;
  911. linothreelo := LinotypeOneZeroZero;
  912.  
  913. % These values from {\tt d\_webb@chcc.harwell.aea-technology.uk}.
  914. mode_def LinotypeThreeZeroZeroHi =      % Linotype Linotronic 300 at 2540dpi
  915.   mode_param (pixels_per_inch, 2540);
  916.   mode_param (blacker, .2);                % Copied from |aps|---conjectural.
  917.   mode_param (fillin, .2);                 % (ditto)
  918.   mode_param (o_correction, 1);            % (ditto)
  919.   mode_common_setup_;
  920. enddef;
  921. linothree := LinotypeThreeZeroZeroHi;
  922. linosuper := LinotypeThreeZeroZeroHi;
  923.  
  924. % From Richard Watson at the Queensland Institute of Technology.  This
  925. % printer is said to have some kind of Xerox engine, but I don't know
  926. % which.
  927. mode_def LNZeroOne =                    % DEC LN01
  928.   mode_param (pixels_per_inch, 300);
  929.   mode_param (blacker, .9);
  930.   mode_param (fillin, 0);
  931.   mode_param (o_correction, .5);
  932.   mode_common_setup_;
  933.   mode_write_white_setup_;
  934. enddef;
  935.  
  936. % From {\tt oxtex@vax.oxford.ac.uk}.
  937. mode_def LPSFourZero =                  % DEC LPS40
  938.   mode_write_white_setup_;
  939.   LNZeroOne_;
  940. enddef;
  941. LPS := LPSFourZero;
  942.  
  943. % These values from {\tt karl@cs.umb.edu}.  |blacker = .8| or more
  944. % thickens dots, to their detriment.  |blacker = .6| produces two-pixel
  945. % stems, which looks pretty good for {\tt cmr}, but it's a little dark
  946. % for {\tt cmti}, and {\tt cmbx} and {\tt cmr} then turn out the same.
  947. % |o_correction = 1| made no difference.  |fillin = 1| made no
  948. % difference.
  949. mode_def lview =                        % Sigma L-View monitor
  950.   mode_param (pixels_per_inch, 118.06);
  951.   mode_param (aspect_ratio, 109.25 / pixels_per_inch);
  952.   mode_param (blacker, 0);
  953.   mode_param (fillin, 0);
  954.   mode_param (o_correction, 0);
  955.   mode_common_setup_;
  956. enddef;
  957.  
  958. % This |mode_def| is untested.
  959. mode_def MacMagnified =                 % Mac screens at magstep 1
  960.   mode_param (pixels_per_inch, 86.4);
  961.   mode_param (blacker, .35);
  962.   mode_param (fillin, .1);
  963.   mode_param (o_correction, .3);
  964.   mode_common_setup_;
  965. enddef;
  966. bettermac := MacMagnified;
  967.  
  968. % From the VMS distribution tape (except {\tt karl@cs.umb.edu} changed
  969. % the |o_correction| to zero).
  970. mode_def MacTrueSize =                  % Mac screens at 72dpi
  971.   mode_param (pixels_per_inch, 72);
  972.   mode_param (blacker, .0);
  973.   mode_param (fillin, 0);
  974.   mode_param (o_correction, 0);
  975.   mode_common_setup_;
  976. enddef;
  977. truemac := MacTrueSize;
  978.  
  979. % From {\tt rokicki@neon.stanford.edu}.
  980. mode_def NEC =                          % NEC
  981.   mode_param (pixels_per_inch, 180);
  982.   mode_param (blacker, 0);
  983.   mode_param (fillin, 0);
  984.   mode_param (o_correction, .2);
  985.   mode_common_setup_;
  986. enddef;
  987.  
  988. % This is the same as |CanonCX|, except for the resolution.
  989. mode_def NEChi =                        % NEC-P6 at 360x360dpi
  990.   mode_param (pixels_per_inch, 360);
  991.   CanonCX_;
  992. enddef;
  993. lqhires := NEChi;
  994.  
  995. % From {\tt lambert@silver.cs.umanitoba.ca}.
  996. mode_def Newgen =                       % Newgen 400dpi
  997.   mode_param (pixels_per_inch, 400);
  998.   CanonCX_;
  999. enddef;
  1000.  
  1001. % From {\tt rokicki@neon.stanford.edu}.
  1002. mode_def NeXTprinter =                  % NeXT 400dpi
  1003.   mode_param (pixels_per_inch, 400);
  1004.   CanonCX_;
  1005. enddef;
  1006. nexthi := NeXTprinter;
  1007.  
  1008. % From {\tt rokicki@neon.stanford.edu}.
  1009. mode_def NeXTscreen =                   % 100dpi NeXT monitor
  1010.   mode_param (pixels_per_inch, 100);
  1011.   mode_param (blacker, 0);
  1012.   mode_param (fillin, 0);
  1013.   mode_param (o_correction, 0);
  1014.   mode_common_setup_;
  1015. enddef;
  1016. nextscreen := NeXTscreen;
  1017.  
  1018. % From {\tt deby@cs.utwente.nl} and {\tt issue@vax.oxford.ac.uk}.
  1019. mode_def OCESixSevenFiveZeroPS =        % OCE 6750-PS
  1020.   mode_param (pixels_per_inch, 508);
  1021.   mode_param (blacker, 0);
  1022.   mode_param (fillin, 0);
  1023.   mode_param (o_correction, .7);
  1024.   mode_common_setup_;
  1025. enddef;
  1026.  
  1027. % From {\tt rokicki@neon.stanford.edu}.
  1028. mode_def okidata =                      % Okidata
  1029.   mode_param (pixels_per_inch, 240);
  1030.   mode_param (aspect_ratio, 288 / pixels_per_inch);
  1031.   mode_param (blacker, 0);
  1032.   mode_param (fillin, 0);
  1033.   mode_param (o_correction, .2);
  1034.   mode_common_setup_;
  1035. enddef;
  1036. okihi := okidata;
  1037.  
  1038. % {\tt AMSmodes.def} defines |pcscreen| to be essentially this, but with
  1039. % a resolution of 118.  I figured |pcscreen| was such a general name
  1040. % that I could change the definition slightly.
  1041. mode_def OneTwoZero =                   % e.g., high-resolution Suns
  1042.   mode_param (pixels_per_inch, 120);
  1043.   mode_param (blacker, .35);
  1044.   mode_param (fillin, .1);
  1045.   mode_param (o_correction, .3);
  1046.   mode_common_setup_;
  1047. enddef;
  1048. pcscreen := OneTwoZero;
  1049.  
  1050. % This is a write-white PostScript laser-setter, made by a Xerox
  1051. % subsidiary.  It has a bizarre nonsquare aspect ratio of 1/2, but {\tt
  1052. % mis@apsedoff.bitnet} says that the printer hides this, and PostScript
  1053. % programs should treat it as having a square aspect ratio.
  1054. % Headquarters in Minnesota; telephone: (612) 456-1400.  At this
  1055. % resolution, the write-white correction may not matter, but it is safer
  1056. % to turn it on anyway.  This |mode_def| not yet tested in production.
  1057. mode_def PrintwareSevenTwoZeroIQ =      % Printware 720IQ
  1058.   mode_param (pixels_per_inch, 1200);
  1059.   mode_param (blacker, 0);
  1060.   mode_param (fillin, 0);
  1061.   mode_param (o_correction, 1);
  1062.   mode_common_setup_;
  1063.   mode_write_white_setup_;
  1064. enddef;
  1065.  
  1066. % From John Gourlay.  See {\sl TUGboat} 8(2), page 133.
  1067. mode_def qms =                          % QMS (Xerox engine)
  1068.   mode_param (pixels_per_inch, 300);
  1069.   mode_param (blacker, .6);
  1070.   mode_param (fillin, -.3);
  1071.   mode_param (o_correction, .6);
  1072.   mode_common_setup_;
  1073.   mode_write_white_setup_;
  1074. enddef;
  1075.  
  1076. % These values from Stan Osborne, {\sl TUGboat} 8(2), page 134.
  1077. mode_def RicohFourZeroEightZero =       % e.g., the TI Omnilaser
  1078.   mode_param (pixels_per_inch, 300);
  1079.   mode_param (blacker, .2);
  1080.   mode_param (fillin, -.2);
  1081.   mode_param (o_correction, .5);
  1082.   mode_common_setup_;
  1083.   mode_write_white_setup_;
  1084. enddef;
  1085. ricoh := RicohFourZeroEightZero;
  1086. RicohFortyEighty := RicohFourZeroEightZero;
  1087.  
  1088. % From John Sauter.
  1089. mode_def RicohLP =                      % e.g., the DEC LN03
  1090.   mode_param (pixels_per_inch, 300);
  1091.   mode_param (blacker, .65);
  1092.   mode_param (fillin, -.2);
  1093.   mode_param (o_correction, .5);
  1094.   mode_common_setup_;
  1095.   mode_write_white_setup_;
  1096. enddef;
  1097. LNOthree := RicohLP;
  1098. LNZeroThree := RicohLP;
  1099.  
  1100. % From {\tt dickson@eeserv.ee.umanitoba.ca}.  {\tt gil.cc.gatech.edu}
  1101. % has different values.  Corrected by {\tt andy@vlsi.cs.caltech.edu}, 28
  1102. % August 1991.
  1103. mode_def SparcPrinterBlack =            % Sun SPARCprinter -- write/black
  1104.   mode_param (pixels_per_inch, 400);
  1105.   mode_param (blacker, .25);
  1106.   mode_param (fillin, .2);
  1107.   mode_param (o_correction, .6);
  1108.   mode_common_setup_;
  1109. enddef;
  1110.  
  1111. % From {\tt dmjones@theory.lcs.mit.edu}.  I guess some SPARCprinters are
  1112. % write-white, and some are write-black.  Hmph.
  1113. mode_def SparcPrinterWhite =            % Sun SPARCprinter -- write/white
  1114.   mode_param (pixels_per_inch, 400);
  1115.   mode_param (blacker, .35);
  1116.   mode_param (fillin, .2);
  1117.   mode_param (o_correction, .6);
  1118.   mode_common_setup_;
  1119.   mode_write_white_setup_;
  1120. enddef;
  1121.  
  1122. % From {\tt ee@dacth51.bitnet}.
  1123. mode_def StarNLOneZero =                % Star NL-10
  1124.   mode_param (pixels_per_inch, 240);
  1125.   mode_param (aspect_ratio, 216 / pixels_per_inch);
  1126.   mode_param (blacker, -.6);
  1127.   mode_param (fillin, .2);
  1128.   mode_param (o_correction, .4);
  1129.   mode_common_setup_;
  1130. enddef;
  1131.  
  1132. % From {\tt grunwald@foobar.colorado.edu}.  Sun monitors have several
  1133. % different resolutions, but this seems the best choice of the lot.
  1134. mode_def sun =                          % Sun and BBN Bitgraph at 85dpi
  1135.   mode_param (pixels_per_inch, 85);
  1136.   mode_param (blacker, .35);
  1137.   mode_param (fillin, .1);
  1138.   mode_param (o_correction, .3);
  1139.   mode_common_setup_;
  1140. enddef;
  1141.  
  1142. mode_def supre =                        % Ultre*setter at 2400dpi
  1143.   mode_param (pixels_per_inch, 2400);
  1144.   mode_param (blacker, 0);
  1145.   mode_param (fillin, 0);
  1146.   mode_param (o_correction, 1);
  1147.   mode_common_setup_;
  1148. enddef;
  1149.  
  1150. mode_def toshiba =                      % Toshiba 13XX, EpsonLQ
  1151.   mode_param (pixels_per_inch, 180);
  1152.   mode_param (blacker, 0);
  1153.   mode_param (fillin, 0);
  1154.   mode_param (o_correction, .2);
  1155.   mode_common_setup_;
  1156. enddef;
  1157. epsonlq := toshiba;
  1158.  
  1159. mode_def ultre =                        % Ultre*setter at 1200dpi
  1160.   mode_param (pixels_per_inch, 1200);
  1161.   mode_param (blacker, 0);
  1162.   mode_param (fillin, 0);
  1163.   mode_param (o_correction, 1);
  1164.   mode_common_setup_;
  1165. enddef;
  1166. Prism := ultre;
  1167.  
  1168. % From {\tt rocky@watson.ibm.com}.  This can also be used for the
  1169. % Autologic's APS6 cut sheet dry process printer.  For that printer,
  1170. % perhaps |blacker=0.8| is better. For the Varityper, though, at
  1171. % |blacker=0.8| the dots of the umlaut start to fill in.  For
  1172. % |blacker<0.6|, the tops and bottoms of lowercase g's and s's in {\tt
  1173. % cmr5} drop out.
  1174. mode_def VarityperFiveZeroSixZeroW =    % Varitype 5060W
  1175.   mode_param (pixels_per_inch, 600);
  1176.   mode_param (blacker, .7);
  1177.   mode_param (fillin, 0);
  1178.   mode_param (o_correction, 1);
  1179.   mode_common_setup_;
  1180. enddef;
  1181. APSSixMed := VarityperFiveZeroSixZeroW;
  1182.  
  1183. % From {\tt mjm@as.arizona.edu}, 26 February 1992.  Untested.
  1184. mode_def VarityperFourThreeZeroZeroLo = % Varityper 4300P at 1200dpi
  1185.   mode_param (pixels_per_inch, 1200);
  1186.   mode_param (blacker, 0);
  1187.   mode_param (fillin, 0);
  1188.   mode_param (o_correction, 1);
  1189.   mode_common_setup_;
  1190. enddef;
  1191. VTfthlo := VarityperFourThreeZeroZeroLo;
  1192.  
  1193. % From {\tt mjm@as.arizona.edu}, 26 February 1992.
  1194. mode_def VarityperFourThreeZeroZeroHi = % Varityper 4300P at 2400dpi
  1195.   mode_param (pixels_per_inch, 2400);
  1196.   mode_param (blacker, 0);
  1197.   mode_param (fillin, 0);
  1198.   mode_param (o_correction, 1);
  1199.   mode_common_setup_;
  1200. enddef;
  1201. VTfthhi := VarityperFourThreeZeroZeroHi;
  1202.  
  1203. % From {\tt erikjan@icce.rug.nl}, 23 August 1991.
  1204. mode_def VarityperFourTwoZeroZero =     % Varityper 4200 B-P
  1205.   mode_param (pixels_per_inch, 1800);
  1206.   mode_param (blacker, 0);
  1207.   mode_param (fillin, 0);
  1208.   mode_param (o_correction, 1);
  1209.   mode_common_setup_;
  1210. enddef;
  1211.  
  1212. % The worst problem is toner irregularity.  This may be the same printer
  1213. % as the IBM 4250.
  1214. mode_def VarityperSixZeroZero =         % Varityper Laser 600
  1215.   mode_param (pixels_per_inch, 600);
  1216.   mode_param (blacker, 0);
  1217.   mode_param (fillin, 0);
  1218.   mode_param (o_correction, 1);
  1219.   mode_common_setup_;
  1220. enddef;
  1221. varityper := VarityperSixZeroZero;
  1222. VTSix := VarityperSixZeroZero;
  1223.  
  1224. % From {\tt Martin.Ward@durham.ac.uk}.
  1225. mode_def VAXstation =                   % VAXstation monitor
  1226.   mode_param (pixels_per_inch, 78);
  1227.   mode_param (blacker, 0);
  1228.   mode_param (fillin, 0);
  1229.   mode_param (o_correction, 0);
  1230.   mode_common_setup_;
  1231. enddef;
  1232. vs := VAXstation;
  1233. gpx := VAXstation;
  1234.  
  1235. % Here is some general information about the Xerox printers, from {\tt
  1236. % siemsen@barnard.usc.edu}:
  1237. % The Docutech system and the 4135 have the same engine.
  1238. % The 4050, 4075 and 4090 have the same engine.
  1239. % The 4650 has a unique engine.
  1240. % The 4850 has a unique engine.
  1241.  
  1242. % From {\tt u12570@uicvm.uic.edu}.  These values are mostly guesses.
  1243. mode_def XeroxEightSevenNineZero =      % Xerox 8790 or 4045
  1244.   mode_param (pixels_per_inch, 300);
  1245.   mode_param (blacker, 0.4);
  1246.   mode_param (fillin, 0);
  1247.   mode_param (o_correction, 0.2);
  1248.   mode_common_setup_;
  1249.   mode_write_white_setup_;
  1250. enddef;
  1251.  
  1252. % From {\tt u12570@uicvm.uic.edu}.  Many variations for different fonts
  1253. % here.
  1254. mode_def XeroxFourZeroFiveZero =        % Xerox 4050
  1255.   mode_param (pixels_per_inch, 300);
  1256.   mode_param (blacker, .7);
  1257.   mode_param (fillin, 0);
  1258.   mode_param (o_correction, .5);
  1259.   mode_common_setup_;
  1260. enddef;
  1261.  
  1262. % From {\tt u12570@uicvm.uic.edu}.  He sent many variations of this,
  1263. % for different fonts.  I don't know a reasonable way to put them in
  1264. % yet, so this is just the basic entry.
  1265. mode_def XeroxNineSevenZeroZero =       % Xerox 9700
  1266.   mode_param (pixels_per_inch, 300);
  1267.   mode_param (blacker, .7);
  1268.   mode_param (fillin, 0);
  1269.   mode_param (o_correction, .5);
  1270.   mode_common_setup_;
  1271. enddef;
  1272.  
  1273. % From {\tt lee@sq.com}.  These values may be improvable.
  1274. mode_def XeroxThreeSevenZeroZero =      % Xerox 3700
  1275.   mode_param (pixels_per_inch, 300);
  1276.   mode_param (blacker, .85);
  1277.   mode_param (fillin, -.1);
  1278.   mode_param (o_correction, .5);
  1279.   mode_common_setup_;
  1280.   mode_write_white_setup_;
  1281. enddef;
  1282.  
  1283. mode_def help =                         % What modes are defined?
  1284.  for i = 1 upto number_of_modes:
  1285.    message mode_name[i];
  1286.  endfor;
  1287.  % Doesn't make sense to be able to do this twice, so forget this
  1288.  % definition after it's been used.
  1289.  save ?;
  1290. enddef;
  1291.  
  1292. let ? = help_;
  1293.  
  1294. % These variables determine the size of \MF's (window system) window for
  1295. % online output.  These numbers should match whatever the window system
  1296. % is told, or bizarre positioning of the output in the window results.
  1297. % Properly implemented online device drivers will use these values as
  1298. % the default size.
  1299. screen_cols := 400;
  1300. screen_rows := 600;
  1301.  
  1302. % The mode most commonly used to make fonts here.
  1303. localfont := CanonCX;
  1304.  
  1305. %%\bye
  1306. %%%% Local variables:
  1307. %%%% page-delimiter: "^% here are"
  1308. %%%% End:
  1309.