home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / x / volume17 / xdvi / patch15 < prev    next >
Encoding:
Internet Message Format  |  1992-06-28  |  46.5 KB

  1. Path: uunet!usc!elroy.jpl.nasa.gov!swrinde!mips!msi!dcmartin
  2. From: vojta%math.Berkeley.EDU@ucbvax.Berkeley.EDU (Paul Vojta)
  3. Newsgroups: comp.sources.x
  4. Subject: v17i107: xdvi, Patch15, Part01/01, Patch15, Part01/01
  5. Message-ID: <1992Jun29.160930.9375@msi.com>
  6. Date: 29 Jun 92 16:09:30 GMT
  7. References: <csx-17i107-xdvi@uunet.UU.NET>
  8. Sender: dcmartin@msi.com (David C. Martin - Moderator)
  9. Organization: Molecular Simulations, Inc.
  10. Lines: 1534
  11. Approved: dcmartin@msi.com
  12. Originator: dcmartin@fascet
  13.  
  14. Submitted-by: vojta%math.Berkeley.EDU@ucbvax.Berkeley.EDU (Paul Vojta)
  15. Posting-number: Volume 17, Issue 107
  16. Archive-name: xdvi/patch15
  17. Patch-To: xdvi: Volume 17, Issues 23, 24, 25, 40, 41, 27
  18. Patch-To: xdvi: Volume 17, Issue 53
  19. Patch-To: xdvi: Volume 17, Issue 106
  20.  
  21. This patch:
  22.  
  23.  o  implements the MakeTeXPK script (courtesy of Tom Rokicki, author
  24.     of dvips) which invokes metafont to create a font when one does not
  25.     exist in the right size;
  26.  
  27.  o  changes the call to XtGetApplicationResources, in the hope that it
  28.     will work on a Convex; and
  29.  
  30.  o  fixes a(nother) bug with virtual fonts.
  31.  
  32. --Paul Vojta, vojta@math.berkeley.edu
  33.  
  34. -- cut here --
  35. diff -cr xdvi_old/MakeTeXPK xdvi_new/MakeTeXPK
  36. *** xdvi_old/MakeTeXPK    Fri Jun 19 14:48:57 1992
  37. --- xdvi_new/MakeTeXPK    Fri Jun 19 13:32:07 1992
  38. ***************
  39. *** 0 ****
  40. --- 1,141 ----
  41. + #!/bin/sh
  42. + #
  43. + #   This script file makes a new TeX PK font, because one wasn't
  44. + #   found.  Parameters are:
  45. + #
  46. + #   name dpi bdpi magnification [mode [subdir]]
  47. + #
  48. + #   `name' is the name of the font, such as `cmr10'.  `dpi' is
  49. + #   the resolution the font is needed at.  `bdpi' is the base
  50. + #   resolution, useful for figuring out the mode to make the font
  51. + #   in.  `magnification' is a string to pass to MF as the
  52. + #   magnification.  `mode', if supplied, is the mode to use.
  53. + #
  54. + #   Note that this file must execute Metafont, and then gftopk,
  55. + #   and place the result in the correct location for the PostScript
  56. + #   driver to find it subsequently.  If this doesn't work, it will
  57. + #   be evident because MF will be invoked over and over again.
  58. + #
  59. + #   Of course, it needs to be set up for your site.
  60. + #
  61. + TEXDIR=/usr/lib/tex
  62. + LOCALDIR=/LocalLibrary/Fonts/TeXFonts
  63. + DESTDIR=$LOCALDIR/pk
  64. + #
  65. + # TEMPDIR needs to be unique for each process because of the possibility
  66. + # of simultaneous processes running this script.
  67. + #
  68. + if test "$TMPDIR" = ""
  69. + then
  70. +    TEMPDIR=/tmp/mtpk.$$
  71. + else
  72. +    TEMPDIR=$TMPDIR/mtpk.$$
  73. + fi
  74. + NAME=$1
  75. + DPI=$2
  76. + BDPI=$3
  77. + MAG=$4
  78. + MODE=$5
  79. + umask 0
  80. + if test "$MODE" = ""
  81. + then
  82. +    if test $BDPI = 300
  83. +    then
  84. +       MODE=imagen
  85. +    elif test $BDPI = 200
  86. +    then
  87. +       MODE=FAX
  88. +    elif test $BDPI = 360
  89. +    then
  90. +       MODE=nextII
  91. +    elif test $BDPI = 400
  92. +    then
  93. +       MODE=nexthi
  94. +    elif test $BDPI = 100
  95. +    then
  96. +       MODE=nextscreen
  97. +    elif test $BDPI = 635
  98. +    then
  99. +       MODE=linolo
  100. +    elif test $BDPI = 1270
  101. +    then
  102. +       MODE=linohi
  103. +    elif test $BDPI = 2540
  104. +    then
  105. +       MODE=linosuper
  106. +    else
  107. +       echo "I don't know the mode for $BDPI"
  108. +       echo "Have your system admin update MakeTeXPK"
  109. +       exit 1
  110. +    fi
  111. + fi
  112. + #  Something like the following is useful at some sites.
  113. + # DESTDIR=/usr/local/lib/tex/fonts/pk.$MODE
  114. + GFNAME=$NAME.$DPI'gf'
  115. + PKNAME=$NAME.$DPI'pk'
  116. + # Clean up on normal or abnormal exit
  117. + trap "cd /; /bin/rm -rf $TEMPDIR $DESTDIR/pktmp.$$" 0 1 2 15
  118. + if test ! -d $DESTDIR
  119. + then
  120. +    mkdir $DESTDIR
  121. + fi
  122. + if test "$6" != ""
  123. + then
  124. +    DESTDIR=$DESTDIR"$6"
  125. +    if test ! -d $DESTDIR
  126. +    then
  127. +       mkdir $DESTDIR
  128. +    fi
  129. + fi
  130. + mkdir $TEMPDIR
  131. + cd $TEMPDIR
  132. + if test -r $DESTDIR/$PKNAME
  133. + then
  134. +    echo "$DESTDIR/$PKNAME already exists!"
  135. +    exit 0
  136. + fi
  137. + # check also in the standard place
  138. + if test "$6" = ""
  139. + then
  140. +    if test -r $TEXDIR/fonts/pk/$PKNAME
  141. +    then
  142. +       echo $TEXDIR/fonts/pk/$PKNAME already exists!
  143. +       exit 0
  144. +    fi
  145. + else
  146. +    if test -r $TEXDIR/fonts/pk/$6"$PKNAME"
  147. +    then
  148. +       echo $TEXDIR/fonts/pk/$6"$PKNAME" already exists!
  149. +       exit 0
  150. +    fi
  151. + fi
  152. + echo "mf \"\\mode:=$MODE; mag:=$MAG; scrollmode; input $NAME\" < /dev/null"
  153. + mf "\mode:=$MODE; mag:=$MAG; scrollmode; input $NAME" < /dev/null
  154. + if test ! -r $GFNAME
  155. + then
  156. +    echo "Metafont failed for some reason on $GFNAME"
  157. +    exit 1
  158. + fi
  159. + gftopk -v ./$GFNAME ./$PKNAME
  160. + # Install the PK file carefully, since others may be doing the same
  161. + # as us simultaneously.
  162. + mv $PKNAME $DESTDIR/pktmp.$$
  163. + cd $DESTDIR
  164. + mv pktmp.$$ $PKNAME
  165. + exit 0
  166. diff -cr xdvi_old/README xdvi_new/README
  167. *** xdvi_old/README    Mon Jun  1 16:25:55 1992
  168. --- xdvi_new/README    Fri Jun 19 13:18:24 1992
  169. ***************
  170. *** 81,86 ****
  171. --- 81,95 ----
  172.               right-to-left languages).
  173.       GREY        (everything)  Use greyscale anti-aliasing for
  174.               displaying shrunken bitmaps.
  175. +     MAKEPK        (font_open.c)  If a font is not found, then try to
  176. +             call Metafont to create the font.  When using this
  177. +             option, remember to set the paths in MakeTeXPK
  178. +             correctly for your site, and be sure that the
  179. +             destination directory for MakeTeXPK appears in your
  180. +             DEFAULT_FONT_PATH variable.
  181. +     MAKEPKCMD=/usr/local/tex/bin/MakeTeXPK (font_open.c)  Same as the
  182. +             above, but this variant explicitly declares which
  183. +             command to use to create the font.
  184.   
  185.   All flags should be set in the appropriate Makefile via the variable ``DEFS''.
  186.   
  187. ***************
  188. *** 248,252 ****
  189. --- 257,263 ----
  190.      31.  Added support for TeXXeT.
  191.   --  Patchlevel 14: --
  192.      32.  Added support for greyscale anti-aliasing.
  193. + --  Patchlevel 15: --
  194. +    33.  Added support for MakeTeXPK, as in dvips.
  195.   
  196.   Paul Vojta, vojta@math.berkeley.edu
  197. diff -cr xdvi_old/dvi_draw.c xdvi_new/dvi_draw.c
  198. *** xdvi_old/dvi_draw.c    Mon Jun  1 18:08:40 1992
  199. --- xdvi_new/dvi_draw.c    Fri Jun 19 12:25:05 1992
  200. ***************
  201. *** 106,113 ****
  202.   };
  203.   #endif    /* BMLONG */
  204.   
  205. - extern    char    *xmalloc();
  206.   #ifdef    VMS
  207.   #define    off_t    int
  208.   #endif
  209. --- 106,111 ----
  210. ***************
  211. *** 389,395 ****
  212.                      DefaultDepthOfScreen(SCRN)), "character pixmap");
  213.       g->image2 = XCreateImage(DISP,DefaultVisualOfScreen(SCRN),
  214.                    DefaultDepthOfScreen(SCRN),
  215. !                  XYPixmap, 0, g->pixmap2,
  216.                    g->bitmap2.w, g->bitmap2.h,
  217.                    BITS_PER_BMUNIT, 0);
  218.   
  219. --- 387,393 ----
  220.                      DefaultDepthOfScreen(SCRN)), "character pixmap");
  221.       g->image2 = XCreateImage(DISP,DefaultVisualOfScreen(SCRN),
  222.                    DefaultDepthOfScreen(SCRN),
  223. !                  ZPixmap, 0, g->pixmap2,
  224.                    g->bitmap2.w, g->bitmap2.h,
  225.                    BITS_PER_BMUNIT, 0);
  226.   
  227. ***************
  228. *** 594,602 ****
  229.   #else
  230.   void
  231.   set_char(cmd, ch)
  232. !     ubyte    cmd;
  233.   #endif
  234. !     ubyte    ch;
  235.   {
  236.       register struct glyph *g;
  237.   #ifdef    TEXXET
  238. --- 592,600 ----
  239.   #else
  240.   void
  241.   set_char(cmd, ch)
  242. !     WIDEARG(ubyte, int)    cmd;
  243.   #endif
  244. !     WIDEARG(ubyte, int)    ch;
  245.   {
  246.       register struct glyph *g;
  247.   #ifdef    TEXXET
  248. ***************
  249. *** 666,674 ****
  250.   #else
  251.   void
  252.   set_vf_char(cmd, ch)
  253. !     ubyte    cmd;
  254.   #endif
  255. !     ubyte    ch;
  256.   {
  257.       register struct macro *m;
  258.       struct drawinf    oldinfo;
  259. --- 664,672 ----
  260.   #else
  261.   void
  262.   set_vf_char(cmd, ch)
  263. !     WIDEARG(ubyte, int)    cmd;
  264.   #endif
  265. !     WIDEARG(ubyte, int)    ch;
  266.   {
  267.       register struct macro *m;
  268.       struct drawinf    oldinfo;
  269. diff -cr xdvi_old/dvi_init.c xdvi_new/dvi_init.c
  270. *** xdvi_old/dvi_init.c    Mon Jun  1 16:26:40 1992
  271. --- xdvi_new/dvi_init.c    Wed Jun 10 18:46:09 1992
  272. ***************
  273. *** 127,134 ****
  274.   
  275.   void
  276.   realloc_font(fontp, newsize)
  277. !     struct font *fontp;
  278. !     ubyte    newsize;
  279.   {
  280.       struct glyph *glyph;
  281.   
  282. --- 127,134 ----
  283.   
  284.   void
  285.   realloc_font(fontp, newsize)
  286. !     struct font        *fontp;
  287. !     WIDEARG(ubyte, int)    newsize;
  288.   {
  289.       struct glyph *glyph;
  290.   
  291. ***************
  292. *** 148,155 ****
  293.   
  294.   void
  295.   realloc_virtual_font(fontp, newsize)
  296. !     struct font *fontp;
  297. !     ubyte    newsize;
  298.   {
  299.       struct macro *macro;
  300.   
  301. --- 148,155 ----
  302.   
  303.   void
  304.   realloc_virtual_font(fontp, newsize)
  305. !     struct font        *fontp;
  306. !     WIDEARG(ubyte, int)    newsize;
  307.   {
  308.       struct macro *macro;
  309.   
  310. diff -cr xdvi_old/font_open.c xdvi_new/font_open.c
  311. *** xdvi_old/font_open.c    Tue May 19 15:09:48 1992
  312. --- xdvi_new/font_open.c    Mon Jun 15 12:49:37 1992
  313. ***************
  314. *** 73,79 ****
  315.   char    *sprintf();
  316.   #endif
  317.   
  318. ! char    *xmalloc(), *getenv();
  319.   
  320.   #ifndef    atof
  321.   double    atof();
  322. --- 73,79 ----
  323.   char    *sprintf();
  324.   #endif
  325.   
  326. ! char    *getenv();
  327.   
  328.   #ifndef    atof
  329.   double    atof();
  330. ***************
  331. *** 333,338 ****
  332. --- 333,339 ----
  333.   
  334.       if ((font_path = getenv("XDVIFONTS")) == NULL
  335.   #ifndef    XDVIFONTS_ONLY
  336. +         && (font_path = getenv("PKFONTS")) == NULL
  337.           && (font_path = getenv("TEXFONTS")) == NULL
  338.   #endif
  339.           ) {
  340. ***************
  341. *** 365,371 ****
  342.       compute_subdir_paths(font_path, default_font_path);
  343.   #endif
  344.   
  345. !     if ((vf_path = getenv("XDVIVFS")) == NULL) {
  346.           vf_path = default_vf_path;
  347.           default_vf_path = NULL;
  348.       }
  349. --- 366,376 ----
  350.       compute_subdir_paths(font_path, default_font_path);
  351.   #endif
  352.   
  353. !     if ((vf_path = getenv("XDVIVFS")) == NULL
  354. ! #ifndef    XDVIFONTS_ONLY
  355. !         && (vf_path = getenv("VFFONTS")) == NULL
  356. ! #endif
  357. !         ) {
  358.           vf_path = default_vf_path;
  359.           default_vf_path = NULL;
  360.       }
  361. ***************
  362. *** 563,569 ****
  363.           if (*p == '\0') break;
  364.           }
  365.           else {
  366. !         if ((f = formatted_open(p, font, "vf", 0, name, 0,
  367.               DEFAULT_VF_TAIL)) != NULL)
  368.               return f;
  369.           p = index(p, PATH_SEP);
  370. --- 568,574 ----
  371.           if (*p == '\0') break;
  372.           }
  373.           else {
  374. !         if ((f = formatted_open(p, font, "vf", 0, name, True,
  375.               DEFAULT_VF_TAIL)) != NULL)
  376.               return f;
  377.           p = index(p, PATH_SEP);
  378. diff -cr xdvi_old/mksedscript xdvi_new/mksedscript
  379. *** xdvi_old/mksedscript    Mon Jun  1 16:26:49 1992
  380. --- xdvi_new/mksedscript    Fri Jun 19 13:01:57 1992
  381. ***************
  382. *** 8,13 ****
  383. --- 8,14 ----
  384.       if ($x == -DSEARCH_SUBDIRECTORIES) set subdir
  385.       if ($x == -DXDVIFONTS_ONLY) set texfonts
  386.       if ($x == -DGREY)    set grey
  387. +     if ($x =~ -DMAKEPK*)    set makepk
  388.   end
  389.   if ($?x10) then
  390.       echo    /^\#ifx11/,/^\#/d
  391. ***************
  392. *** 20,25 ****
  393. --- 21,27 ----
  394.   if (! $?subdir)        echo /^\#ifsubdir/,/^\#/d
  395.   if ($?texfonts)        echo /^\#iftexfonts/,/^\#/d
  396.   if (! $?grey)        echo /^\#ifgrey/,/^\#/d
  397. + if (! $?makepk)        echo /^\#ifmakepk/,/^\#/d
  398.   echo    /^\#/d
  399.   if ($?a4) then
  400.       echo    's/%%defaultpagesize%%/21 x 29.7 cm (A4 size)/'
  401. diff -cr xdvi_old/patchlevel.h xdvi_new/patchlevel.h
  402. *** xdvi_old/patchlevel.h    Tue Apr  7 12:44:34 1992
  403. --- xdvi_new/patchlevel.h    Tue Jun 16 11:37:36 1992
  404. ***************
  405. *** 1 ****
  406. ! #define PATCHLEVEL 14
  407. --- 1 ----
  408. ! #define PATCHLEVEL 15
  409. diff -cr xdvi_old/tpic.c xdvi_new/tpic.c
  410. *** xdvi_old/tpic.c    Tue Feb 11 13:32:18 1992
  411. --- xdvi_new/tpic.c    Thu Jun 11 14:45:50 1992
  412. ***************
  413. *** 246,253 ****
  414.    * Draw an arc
  415.    */
  416.   static    void
  417. ! arc(cp)
  418.       char    *cp;
  419.   {
  420.       int    xc, yc, xrad, yrad, n;
  421.       float    start_angle, end_angle, angle, theta, r;
  422. --- 246,254 ----
  423.    * Draw an arc
  424.    */
  425.   static    void
  426. ! arc(cp, invis)
  427.       char    *cp;
  428. +     Boolean    invis;
  429.   {
  430.       int    xc, yc, xrad, yrad, n;
  431.       float    start_angle, end_angle, angle, theta, r;
  432. ***************
  433. *** 258,263 ****
  434. --- 259,267 ----
  435.           Warning("illegal arc specification: %s", cp);
  436.           return;
  437.       }
  438. +     if (invis) return;
  439.       /* We have a specialized fast way to draw closed circles/ellipses */
  440.       if (start_angle <= 0.0 && end_angle >= 6.282) {
  441.           draw_ellipse(xc, yc, xrad, yrad);
  442. ***************
  443. *** 416,422 ****
  444.       else if (strcmp(command, "da") == 0) flush_dashed(cp, 0);
  445.       else if (strcmp(command, "dt") == 0) flush_dashed(cp, 1);
  446.       else if (strcmp(command, "pa") == 0) add_path(cp);
  447. !     else if (strcmp(command, "ar") == 0) arc(cp);
  448.       else if (strcmp(command, "sp") == 0) flush_spline();
  449.       else if (strcmp(command, "sh") == 0) shade_last();
  450.       else if (strcmp(command, "wh") == 0) whiten_last();
  451. --- 420,427 ----
  452.       else if (strcmp(command, "da") == 0) flush_dashed(cp, 0);
  453.       else if (strcmp(command, "dt") == 0) flush_dashed(cp, 1);
  454.       else if (strcmp(command, "pa") == 0) add_path(cp);
  455. !     else if (strcmp(command, "ar") == 0) arc(cp, False);
  456. !     else if (strcmp(command, "ia") == 0) arc(cp, True);
  457.       else if (strcmp(command, "sp") == 0) flush_spline();
  458.       else if (strcmp(command, "sh") == 0) shade_last();
  459.       else if (strcmp(command, "wh") == 0) whiten_last();
  460. diff -cr xdvi_old/util.c xdvi_new/util.c
  461. *** xdvi_old/util.c    Mon Jun  1 17:08:35 1992
  462. --- xdvi_new/util.c    Wed Jun 10 18:47:23 1992
  463. ***************
  464. *** 185,191 ****
  465.   unsigned long
  466.   num(fp, size)
  467.       register FILE *fp;
  468. !     register ubyte size;
  469.   {
  470.       register long x = 0;
  471.   
  472. --- 185,191 ----
  473.   unsigned long
  474.   num(fp, size)
  475.       register FILE *fp;
  476. !     register WIDEARG(ubyte, int) size;
  477.   {
  478.       register long x = 0;
  479.   
  480. ***************
  481. *** 196,202 ****
  482.   long
  483.   snum(fp, size)
  484.       register FILE *fp;
  485. !     register ubyte size;
  486.   {
  487.       register long x;
  488.   
  489. --- 196,202 ----
  490.   long
  491.   snum(fp, size)
  492.       register FILE *fp;
  493. !     register WIDEARG(ubyte, int) size;
  494.   {
  495.       register long x;
  496.   
  497. diff -cr xdvi_old/xdvi.c xdvi_new/xdvi.c
  498. *** xdvi_old/xdvi.c    Sun Jun  7 11:34:21 1992
  499. --- xdvi_new/xdvi.c    Tue Jun 16 14:29:07 1992
  500. ***************
  501. *** 52,57 ****
  502. --- 52,62 ----
  503.   
  504.   #define    EXTERN
  505.   #define    INIT(x)    =x
  506. + #ifndef    TOOLKIT
  507. + #define    NTINIT(x)    =x
  508. + #else
  509. + #define    NTINIT(x)
  510. + #endif
  511.   #include "xdvi.h"
  512.   
  513.   #include "patchlevel.h"
  514. ***************
  515. *** 95,100 ****
  516. --- 100,106 ----
  517.   #include <X11/Xaw/Command.h>
  518.   #endif
  519.   #else    /* XtSpecificationRelease < 4 */
  520. + #define    XtPointer caddr_t
  521.   #include <X11/Viewport.h>
  522.   #ifdef    BUTTONS
  523.   #include <X11/Command.h>
  524. ***************
  525. *** 184,224 ****
  526.   /*
  527.    * Command line flags.
  528.    */
  529. ! static    _Xconst    char    *paper        = DEFAULT_PAPER;
  530. ! static    char    *sidemargin, *topmargin;
  531. ! static    char    *xoffset, *yoffset;
  532. ! static    Boolean    reverse;
  533.   static    Dimension    bwidth    = 2;
  534. - static    int    bak_shrink;
  535. - static    char    *debug_arg;
  536. - static    int    mg_size[5] = {200, 350, 600, 900, 1200};
  537. - static    char    *curr_page;
  538.   
  539. ! static    int    pageno_correct    = 1;
  540. ! static    Boolean    keep_flag    = False;
  541. ! static    Boolean    version        = False;
  542.   #ifdef    BUTTONS
  543. ! Boolean    expert        = False;
  544.   #endif
  545.   
  546. - #ifndef X10
  547. - #ifdef    TOOLKIT
  548. -         /* fg and bg colors */
  549. - static    Arg    fore_args = {XtNforeground,    (XtArgVal) 0};
  550. - #define    fore_Pixel    fore_args.value
  551. - static    Arg    back_args = {XtNbackground,    (XtArgVal) 0};
  552. - #define    back_Pixel    back_args.value
  553.   #else    /* !TOOLKIT */
  554. ! static    Pixel    fore_Pixel, back_Pixel;
  555. ! #endif    /* TOOLKIT */
  556. ! static    Pixel    brdr_Pixel, hl_Pixel, cr_Pixel;
  557.   #endif    /* X10 */
  558.   
  559.   static    char    *fore_color;
  560.   static    char    *back_color;
  561.   static    char    *brdr_color;
  562.   static    char    *high_color;
  563.   static    char    *curs_color;
  564.   static    GC    foreGC, highGC;
  565.   #ifndef X10
  566.   static    GC    ruleGC;
  567. --- 190,271 ----
  568.   /*
  569.    * Command line flags.
  570.    */
  571.   static    Dimension    bwidth    = 2;
  572.   
  573. ! #ifdef    TOOLKIT
  574. ! #define    RESOURCE(x)    resource.x
  575. ! static    struct _resource {
  576. !     char    *debug_arg;
  577. !     int    _shrink_factor;
  578. !     int    density;
  579. !     int    pixels_per_inch;
  580. !     char    *sidemargin;
  581. !     char    *topmargin;
  582. !     char    *xoffset;
  583. !     char    *yoffset;
  584. !     _Xconst char    *paper;
  585. !     char    *alt_font;
  586. !     Boolean    list_fonts;
  587. !     Boolean    reverse;
  588. !     Boolean    hush_spec;
  589. !     Boolean    hush_chars;
  590. !     Pixel    fore_Pixel;
  591. !     char    *fore_color;
  592. !     Pixel    back_Pixel;
  593. !     char    *back_color;
  594. !     Pixel    brdr_Pixel;
  595. !     char    *brdr_color;
  596. !     Pixel    hl_Pixel;
  597. !     char    *high_color;
  598. !     Pixel    cr_Pixel;
  599. !     char    *curs_color;
  600. !     char    *icon_geometry;
  601. !     Boolean    keep_flag;
  602. !     char    *copy_arg;
  603. !     Boolean    copy;
  604. !     Boolean    thorough;
  605. !     Boolean    version;
  606.   #ifdef    BUTTONS
  607. !     Boolean    expert;
  608.   #endif
  609. +     int    mg_size[5];
  610. + #ifdef    GREY
  611. +     Boolean    use_grey;
  612. + #endif
  613. + } resource;
  614.   
  615.   #else    /* !TOOLKIT */
  616. ! #define    RESOURCE(x)    x
  617. ! static    char    *debug_arg;
  618. ! static    char    *sidemargin, *topmargin;
  619. ! static    char    *xoffset, *yoffset;
  620. ! static    _Xconst    char    *paper        = DEFAULT_PAPER;
  621. ! static    Boolean    reverse;
  622. ! static    Boolean    keep_flag    = False;
  623. ! #ifndef X10
  624. ! static    Pixel    fore_Pixel, back_Pixel, brdr_Pixel, hl_Pixel, cr_Pixel;
  625. ! static    char    *icon_geometry;
  626. ! static    Boolean    copy    = 2;
  627. ! static    Boolean    thorough;
  628.   #endif    /* X10 */
  629. + static    Boolean    version        = False;
  630. + static    int    mg_size[5] = {200, 350, 600, 900, 1200};
  631.   
  632. + #endif    /* TOOLKIT */
  633. + static    char    *curr_page;
  634. + #ifndef    TOOLKIT
  635.   static    char    *fore_color;
  636.   static    char    *back_color;
  637.   static    char    *brdr_color;
  638.   static    char    *high_color;
  639.   static    char    *curs_color;
  640. + #endif
  641.   static    GC    foreGC, highGC;
  642.   #ifndef X10
  643.   static    GC    ruleGC;
  644. ***************
  645. *** 227,232 ****
  646. --- 274,282 ----
  647.   #define    ruleGC    foreGC
  648.   #endif    /* X10 */
  649.   
  650. + static    int    pageno_correct    = 1;
  651. + static    int    bak_shrink;
  652.   #define    clip_w    mane.width
  653.   #define    clip_h    mane.height
  654.   static    Dimension    window_w, window_h;
  655. ***************
  656. *** 615,621 ****
  657.   void
  658.   put_rectangle(x, y, w, h, hl)
  659.       int x, y, w, h;
  660. !     Boolean hl;
  661.   {
  662.       if (x < max_x && x + w >= min_x && y < max_y && y + h >= min_y) {
  663.           if (--event_counter == 0) read_events(False);
  664. --- 665,671 ----
  665.   void
  666.   put_rectangle(x, y, w, h, hl)
  667.       int x, y, w, h;
  668. !     WIDEARG(Boolean, int) hl;
  669.   {
  670.       if (x < max_x && x + w >= min_x && y < max_y && y + h >= min_y) {
  671.           if (--event_counter == 0) read_events(False);
  672. ***************
  673. *** 1162,1170 ****
  674.   #ifndef X10
  675.       XSetWindowAttributes attr;
  676.   
  677. !     alt.width = alt.height = mg_size[event->button - 1];
  678.   #else
  679. !     alt.width = alt.height = mg_size[2 - (event->detail & ValueMask)];
  680.   #endif
  681.       if (alt.win != NULL || mane.shrinkfactor == 1 || alt.width <= 0)
  682.           XBell(DISP, 20);
  683. --- 1212,1221 ----
  684.   #ifndef X10
  685.       XSetWindowAttributes attr;
  686.   
  687. !     alt.width = alt.height = RESOURCE(mg_size[event->button - 1]);
  688.   #else
  689. !     alt.width = alt.height =
  690. !         RESOURCE(mg_size[2 - (event->detail & ValueMask)]);
  691.   #endif
  692.       if (alt.win != NULL || mane.shrinkfactor == 1 || alt.width <= 0)
  693.           XBell(DISP, 20);
  694. ***************
  695. *** 1182,1189 ****
  696.           alt.height/2;
  697.   #ifndef X10
  698.           attr.save_under = True;
  699. !         attr.border_pixel = brdr_Pixel;
  700. !         attr.background_pixel = back_Pixel;
  701.           attr.override_redirect = True;
  702.           alt.win = XCreateWindow(DISP, RootWindowOfScreen(SCRN),
  703.               x, y, alt.width, alt.height, MAGBORD,
  704. --- 1233,1240 ----
  705.           alt.height/2;
  706.   #ifndef X10
  707.           attr.save_under = True;
  708. !         attr.border_pixel = RESOURCE(brdr_Pixel);
  709. !         attr.background_pixel = RESOURCE(back_Pixel);
  710.           attr.override_redirect = True;
  711.           alt.win = XCreateWindow(DISP, RootWindowOfScreen(SCRN),
  712.               x, y, alt.width, alt.height, MAGBORD,
  713. ***************
  714. *** 1368,1374 ****
  715.           pageno_correct = arg0 * number0 - current_page;
  716.           return;
  717.           case 'k':        /* toggle keep-position flag */
  718. !         keep_flag = (arg0 ? number0 : !keep_flag);
  719.           return;
  720.           case '\f':
  721.           /* redisplay current page */
  722. --- 1419,1425 ----
  723.           pageno_correct = arg0 * number0 - current_page;
  724.           return;
  725.           case 'k':        /* toggle keep-position flag */
  726. !         RESOURCE(keep_flag) = (arg0 ? number0 : !RESOURCE(keep_flag));
  727.           return;
  728.           case '\f':
  729.           /* redisplay current page */
  730. ***************
  731. *** 1409,1420 ****
  732.           return;
  733.   #ifdef    BUTTONS
  734.           case 'x':
  735. !         if (arg0 && expert == (number0 != 0)) return;
  736. !         if (expert) {    /* create buttons */
  737.               XtResizeWidget(vport_widget, window_w -= XTRA_WID, window_h,
  738.               0);
  739.               create_buttons((XtArgVal) window_h);
  740. !             expert = False;
  741.           }
  742.           else {        /* destroy buttons */
  743.               XtResizeWidget(vport_widget, window_w += XTRA_WID, window_h,
  744. --- 1460,1471 ----
  745.           return;
  746.   #ifdef    BUTTONS
  747.           case 'x':
  748. !         if (arg0 && resource.expert == (number0 != 0)) return;
  749. !         if (resource.expert) {    /* create buttons */
  750.               XtResizeWidget(vport_widget, window_w -= XTRA_WID, window_h,
  751.               0);
  752.               create_buttons((XtArgVal) window_h);
  753. !             resource.expert = False;
  754.           }
  755.           else {        /* destroy buttons */
  756.               XtResizeWidget(vport_widget, window_w += XTRA_WID, window_h,
  757. ***************
  758. *** 1421,1427 ****
  759.               0);
  760.               XtDestroyWidget(right_widget);
  761.               XtDestroyWidget(line_widget);
  762. !             expert = True;
  763.           }
  764.           return;
  765.   #endif    /* BUTTONS */
  766. --- 1472,1478 ----
  767.               0);
  768.               XtDestroyWidget(right_widget);
  769.               XtDestroyWidget(line_widget);
  770. !             resource.expert = True;
  771.           }
  772.           return;
  773.   #endif    /* BUTTONS */
  774. ***************
  775. *** 1521,1527 ****
  776.           if (current_page != next_page) {
  777.           current_page = next_page;
  778.           hush_spec_now = hush_spec;
  779. !         if (!keep_flag) home(False);
  780.           }
  781.           canit = True;
  782.           Flush();
  783. --- 1572,1578 ----
  784.           if (current_page != next_page) {
  785.           current_page = next_page;
  786.           hush_spec_now = hush_spec;
  787. !         if (!RESOURCE(keep_flag)) home(False);
  788.           }
  789.           canit = True;
  790.           Flush();
  791. ***************
  792. *** 1951,1957 ****
  793.       [-paper <papertype>] [-mgs[n] <size>] [-altfont <font>]\n\
  794.       [-margins <dimen>] [-sidemargin <dimen>] [-topmargin <dimen>]\n\
  795.       [-offsets <dimen>] [-xoffset <dimen>] [-yoffset <dimen>] [-keep]\n\
  796. !     [-hushspecials] [-hushchars] [-hush]\n\
  797.       [-fg <color>] [-bg <color>] [-hl <color>] [-bd <color>] \
  798.   [-cr <color>]\n\
  799.       [-bw <width>] [-geometry <geometry> | =<geometry>]\n\
  800. --- 2002,2008 ----
  801.       [-paper <papertype>] [-mgs[n] <size>] [-altfont <font>]\n\
  802.       [-margins <dimen>] [-sidemargin <dimen>] [-topmargin <dimen>]\n\
  803.       [-offsets <dimen>] [-xoffset <dimen>] [-yoffset <dimen>] [-keep]\n\
  804. !     [-hushspecials] [-hushchars] [-hush] [-version]\n\
  805.       [-fg <color>] [-bg <color>] [-hl <color>] [-bd <color>] \
  806.   [-cr <color>]\n\
  807.       [-bw <width>] [-geometry <geometry> | =<geometry>]\n\
  808. ***************
  809. *** 1974,1985 ****
  810.    **    Main programs start here.
  811.    **/
  812.   
  813. - #ifndef X10
  814. - static    char    *icon_geometry;
  815. - static    Boolean    copy    = 2;
  816. - static    Boolean    thorough;
  817. - #endif    /* X10 */
  818.   #ifdef    TOOLKIT
  819.   
  820.   static    XrmOptionDescRec    options[] = {
  821. --- 2025,2030 ----
  822. ***************
  823. *** 2037,2120 ****
  824.   #endif
  825.   };
  826.   
  827. ! static    XtResource    resources[] = {
  828.   {"debugLevel", "DebugLevel", XtRString, sizeof(char *),
  829. !   (Cardinal) &debug_arg, XtRString, NULL},
  830.   {"shrinkFactor", "ShrinkFactor", XtRInt, sizeof(int),
  831. !   (Cardinal) &shrink_factor, XtRInt, (caddr_t) &shrink_factor},
  832.   {"densityPercent", "DensityPercent", XtRInt, sizeof(int),
  833. !   (Cardinal) &density, XtRInt, (caddr_t) &density},
  834.   {"pixelsPerInch", "PixelsPerInch", XtRInt, sizeof(int),
  835. !   (Cardinal) &pixels_per_inch, XtRInt, (caddr_t) &pixels_per_inch},
  836.   {"sideMargin", "Margin", XtRString, sizeof(char *),
  837. !   (Cardinal) &sidemargin, XtRString, NULL},
  838.   {"topMargin", "Margin", XtRString, sizeof(char *),
  839. !   (Cardinal) &topmargin, XtRString, NULL},
  840.   {"xOffset", "Offset", XtRString, sizeof(char *),
  841. !   (Cardinal) &xoffset, XtRString, NULL},
  842.   {"yOffset", "Offset", XtRString, sizeof(char *),
  843. !   (Cardinal) &yoffset, XtRString, NULL},
  844.   {"paper", "Paper", XtRString, sizeof(char *),
  845. !   (Cardinal) &paper, XtRString, (caddr_t) DEFAULT_PAPER},
  846.   {"altFont", "AltFont", XtRString, sizeof(char *),
  847. !   (Cardinal) &alt_font, XtRString, (caddr_t) ALTFONT},
  848.   {"listFonts", "ListFonts", XtRBoolean, sizeof(Boolean),
  849. !   (Cardinal) &list_fonts, XtRBoolean, (caddr_t) &list_fonts},
  850.   {"reverseVideo", "ReverseVideo", XtRBoolean, sizeof(Boolean),
  851. !   (Cardinal) &reverse, XtRBoolean, (caddr_t) &reverse},
  852.   {"hushSpecials", "Hush", XtRBoolean, sizeof(Boolean),
  853. !   (Cardinal) &hush_spec, XtRBoolean, (caddr_t) &hush_spec},
  854.   {"hushLostChars", "Hush", XtRBoolean, sizeof(Boolean),
  855. !   (Cardinal) &hush_chars, XtRBoolean, (caddr_t) &hush_chars},
  856.   {"foreground", "Foreground", XtRPixel, sizeof(Pixel),
  857. !   (Cardinal)&fore_Pixel, XtRPixel, (caddr_t) &fore_Pixel},
  858.   {"foreground", "Foreground", XtRString, sizeof(char *),
  859. !   (Cardinal)&fore_color, XtRString, NULL},
  860.   {"background", "Background", XtRPixel, sizeof(Pixel),
  861. !   (Cardinal)&back_Pixel, XtRPixel, (caddr_t) &back_Pixel},
  862.   {"background", "Background", XtRString, sizeof(char *),
  863. !   (Cardinal)&back_color, XtRString, NULL},
  864.   {"borderColor", "BorderColor", XtRPixel, sizeof(Pixel),
  865. !   (Cardinal)&brdr_Pixel, XtRPixel, (caddr_t) &brdr_Pixel},
  866.   {"borderColor", "BorderColor", XtRString, sizeof(char *),
  867. !   (Cardinal)&brdr_color, XtRString, NULL},
  868.   {"highlight", "Highlight", XtRPixel, sizeof(Pixel),
  869. !   (Cardinal)&hl_Pixel, XtRPixel, (caddr_t) &hl_Pixel},
  870.   {"highlight", "Highlight", XtRString, sizeof(char *),
  871. !   (Cardinal)&high_color, XtRString, NULL},
  872.   {"cursorColor", "CursorColor", XtRPixel, sizeof(Pixel),
  873. !   (Cardinal)&cr_Pixel, XtRPixel, (caddr_t) &cr_Pixel},
  874.   {"cursorColor", "CursorColor", XtRString, sizeof(char *),
  875. !   (Cardinal)&curs_color, XtRString, NULL},
  876.   {"iconGeometry", "IconGeometry", XtRString, sizeof(char *),
  877. !   (Cardinal)&icon_geometry, XtRString, NULL},
  878.   {"keepPosition", "KeepPosition", XtRBoolean, sizeof(Boolean),
  879. !   (Cardinal)&keep_flag, XtRBoolean, (caddr_t) &keep_flag},
  880.   {"copy", "Copy", XtRBoolean, sizeof(Boolean),
  881. !   (Cardinal)©, XtRBoolean, (caddr_t) ©},
  882.   {"thorough", "Thorough", XtRBoolean, sizeof(Boolean),
  883. !   (Cardinal)&thorough, XtRBoolean, (caddr_t) &thorough},
  884.   {"version", "Version", XtRBoolean, sizeof(Boolean),
  885. !   (Cardinal)&version, XtRBoolean, (caddr_t) &version},
  886.   #ifdef    BUTTONS
  887.   {"expert", "Expert", XtRBoolean, sizeof(Boolean),
  888. !   (Cardinal)&expert, XtRBoolean, (caddr_t) &expert},
  889.   #endif
  890.   {"magnifierSize1", "MagnifierSize", XtRInt, sizeof(int),
  891. !   (Cardinal) &mg_size[0], XtRInt, (caddr_t) &mg_size[0]},
  892.   {"magnifierSize2", "MagnifierSize", XtRInt, sizeof(int),
  893. !   (Cardinal) &mg_size[1], XtRInt, (caddr_t) &mg_size[1]},
  894.   {"magnifierSize3", "MagnifierSize", XtRInt, sizeof(int),
  895. !   (Cardinal) &mg_size[2], XtRInt, (caddr_t) &mg_size[2]},
  896.   {"magnifierSize4", "MagnifierSize", XtRInt, sizeof(int),
  897. !   (Cardinal) &mg_size[3], XtRInt, (caddr_t) &mg_size[3]},
  898.   {"magnifierSize5", "MagnifierSize", XtRInt, sizeof(int),
  899. !   (Cardinal) &mg_size[4], XtRInt, (caddr_t) &mg_size[4]},
  900.   #ifdef    GREY
  901.   {"grey", "Grey", XtRBoolean, sizeof (Boolean),
  902. !  (Cardinal) &use_grey, XtRBoolean, (caddr_t) &use_grey},
  903.   #endif
  904.   };
  905.   
  906.   static    Arg    temp_args1[] = {
  907.       {XtNiconX,    (XtArgVal) 0},
  908. --- 2082,2170 ----
  909.   #endif
  910.   };
  911.   
  912. ! #define    offset(field)    XtOffsetOf(struct _resource, field)
  913. ! static    XtResource    application_resources[] = {
  914.   {"debugLevel", "DebugLevel", XtRString, sizeof(char *),
  915. !   offset(debug_arg), XtRString, (caddr_t) NULL},
  916.   {"shrinkFactor", "ShrinkFactor", XtRInt, sizeof(int),
  917. !   offset(_shrink_factor), XtRString, "3"},
  918.   {"densityPercent", "DensityPercent", XtRInt, sizeof(int),
  919. !   offset(density), XtRString, "40"},
  920.   {"pixelsPerInch", "PixelsPerInch", XtRInt, sizeof(int),
  921. !   offset(pixels_per_inch), XtRString, "300"},
  922.   {"sideMargin", "Margin", XtRString, sizeof(char *),
  923. !   offset(sidemargin), XtRString, (caddr_t) NULL},
  924.   {"topMargin", "Margin", XtRString, sizeof(char *),
  925. !   offset(topmargin), XtRString, (caddr_t) NULL},
  926.   {"xOffset", "Offset", XtRString, sizeof(char *),
  927. !   offset(xoffset), XtRString, (caddr_t) NULL},
  928.   {"yOffset", "Offset", XtRString, sizeof(char *),
  929. !   offset(yoffset), XtRString, (caddr_t) NULL},
  930.   {"paper", "Paper", XtRString, sizeof(char *),
  931. !   offset(paper), XtRString, (caddr_t) DEFAULT_PAPER},
  932.   {"altFont", "AltFont", XtRString, sizeof(char *),
  933. !   offset(alt_font), XtRString, (caddr_t) ALTFONT},
  934.   {"listFonts", "ListFonts", XtRBoolean, sizeof(Boolean),
  935. !   offset(list_fonts), XtRString, "false"},
  936.   {"reverseVideo", "ReverseVideo", XtRBoolean, sizeof(Boolean),
  937. !   offset(reverse), XtRString, "false"},
  938.   {"hushSpecials", "Hush", XtRBoolean, sizeof(Boolean),
  939. !   offset(hush_spec), XtRString, "false"},
  940.   {"hushLostChars", "Hush", XtRBoolean, sizeof(Boolean),
  941. !   offset(hush_chars), XtRString, "false"},
  942.   {"foreground", "Foreground", XtRPixel, sizeof(Pixel),
  943. !   offset(fore_Pixel), XtRPixel, (caddr_t) &resource.fore_Pixel},
  944.   {"foreground", "Foreground", XtRString, sizeof(char *),
  945. !   offset(fore_color), XtRString, (caddr_t) NULL},
  946.   {"background", "Background", XtRPixel, sizeof(Pixel),
  947. !   offset(back_Pixel), XtRPixel, (caddr_t) &resource.back_Pixel},
  948.   {"background", "Background", XtRString, sizeof(char *),
  949. !   offset(back_color), XtRString, (caddr_t) NULL},
  950.   {"borderColor", "BorderColor", XtRPixel, sizeof(Pixel),
  951. !   offset(brdr_Pixel), XtRPixel, (caddr_t) &resource.brdr_Pixel},
  952.   {"borderColor", "BorderColor", XtRString, sizeof(char *),
  953. !   offset(brdr_color), XtRString, (caddr_t) NULL},
  954.   {"highlight", "Highlight", XtRPixel, sizeof(Pixel),
  955. !   offset(hl_Pixel), XtRPixel, (caddr_t) &resource.hl_Pixel},
  956.   {"highlight", "Highlight", XtRString, sizeof(char *),
  957. !   offset(high_color), XtRString, (caddr_t) NULL},
  958.   {"cursorColor", "CursorColor", XtRPixel, sizeof(Pixel),
  959. !   offset(cr_Pixel), XtRPixel, (caddr_t) &resource.cr_Pixel},
  960.   {"cursorColor", "CursorColor", XtRString, sizeof(char *),
  961. !   offset(curs_color), XtRString, (caddr_t) NULL},
  962.   {"iconGeometry", "IconGeometry", XtRString, sizeof(char *),
  963. !   offset(icon_geometry), XtRString, (caddr_t) NULL},
  964.   {"keepPosition", "KeepPosition", XtRBoolean, sizeof(Boolean),
  965. !   offset(keep_flag), XtRString, "false"},
  966. ! {"copy", "Copy", XtRString, sizeof(char *),
  967. !   offset(copy_arg), XtRString, (caddr_t) NULL},
  968.   {"copy", "Copy", XtRBoolean, sizeof(Boolean),
  969. !   offset(copy), XtRString, "false"},
  970.   {"thorough", "Thorough", XtRBoolean, sizeof(Boolean),
  971. !   offset(thorough), XtRString, "false"},
  972.   {"version", "Version", XtRBoolean, sizeof(Boolean),
  973. !   offset(version), XtRString, "false"},
  974.   #ifdef    BUTTONS
  975.   {"expert", "Expert", XtRBoolean, sizeof(Boolean),
  976. !   offset(expert), XtRString, "false"},
  977.   #endif
  978.   {"magnifierSize1", "MagnifierSize", XtRInt, sizeof(int),
  979. !   offset(mg_size[0]), XtRString, "200"},
  980.   {"magnifierSize2", "MagnifierSize", XtRInt, sizeof(int),
  981. !   offset(mg_size[1]), XtRString, "350"},
  982.   {"magnifierSize3", "MagnifierSize", XtRInt, sizeof(int),
  983. !   offset(mg_size[2]), XtRString, "600"},
  984.   {"magnifierSize4", "MagnifierSize", XtRInt, sizeof(int),
  985. !   offset(mg_size[3]), XtRString, "900"},
  986.   {"magnifierSize5", "MagnifierSize", XtRInt, sizeof(int),
  987. !   offset(mg_size[4]), XtRString, "1200"},
  988.   #ifdef    GREY
  989.   {"grey", "Grey", XtRBoolean, sizeof (Boolean),
  990. !  offset(use_grey), XtRString, "true"},
  991.   #endif
  992.   };
  993. + #undef    offset
  994.   
  995.   static    Arg    temp_args1[] = {
  996.       {XtNiconX,    (XtArgVal) 0},
  997. ***************
  998. *** 2465,2472 ****
  999.       _Xconst    char    **p;
  1000.       char    *q;
  1001.   
  1002. !     if (strlen(paper) > sizeof(temp) - 1) return False;
  1003. !     arg = paper;
  1004.       q = temp;
  1005.       for (;;) {    /* convert to lower case */
  1006.           char c = *arg++;
  1007. --- 2515,2522 ----
  1008.       _Xconst    char    **p;
  1009.       char    *q;
  1010.   
  1011. !     if (strlen(RESOURCE(paper)) > sizeof(temp) - 1) return False;
  1012. !     arg = RESOURCE(paper);
  1013.       q = temp;
  1014.       for (;;) {    /* convert to lower case */
  1015.           char c = *arg++;
  1016. ***************
  1017. *** 2534,2543 ****
  1018.           else dvi_name = *argv;
  1019.       }
  1020.   
  1021. !     XtGetApplicationResources(top_level, (caddr_t) NULL, resources,
  1022. !         XtNumber(resources), NULL, 0);
  1023.       DISP = XtDisplay(top_level);
  1024.       SCRN = XtScreen(top_level);
  1025.   
  1026.   #else    /* !TOOLKIT */
  1027.   
  1028. --- 2584,2603 ----
  1029.           else dvi_name = *argv;
  1030.       }
  1031.   
  1032. !     XtGetApplicationResources(top_level, (XtPointer) &resource,
  1033. !         application_resources, XtNumber(application_resources), NULL, 0);
  1034.       DISP = XtDisplay(top_level);
  1035.       SCRN = XtScreen(top_level);
  1036. +     shrink_factor = resource._shrink_factor;
  1037. +     density = resource.density;
  1038. +     pixels_per_inch = resource.pixels_per_inch;
  1039. +     alt_font = resource.alt_font;
  1040. +     list_fonts = resource.list_fonts;
  1041. +     hush_spec = resource.hush_spec;
  1042. +     hush_chars = resource.hush_chars;
  1043. + #ifdef    GREY
  1044. +     use_grey = resource.use_grey;
  1045. + #endif
  1046.   
  1047.   #else    /* !TOOLKIT */
  1048.   
  1049. ***************
  1050. *** 2556,2568 ****
  1051.           dvi_name == NULL) usage();
  1052.       if (shrink_factor != 1) bak_shrink = shrink_factor;
  1053.       mane.shrinkfactor = shrink_factor;
  1054. !     if (debug_arg != NULL)
  1055. !         debug = isdigit(*debug_arg) ? atoi(debug_arg) : DBG_ALL;
  1056. !     if (sidemargin) home_x = atopix(sidemargin);
  1057. !     if (topmargin) home_y = atopix(topmargin);
  1058. !     offset_x = xoffset ? atopix(xoffset) : pixels_per_inch;
  1059. !     offset_y = yoffset ? atopix(yoffset) : pixels_per_inch;
  1060. !     if (!set_paper_type()) oops("Don't recognize paper type %s", paper);
  1061.   
  1062.       init_font_open();
  1063.       open_dvi_file();
  1064. --- 2616,2632 ----
  1065.           dvi_name == NULL) usage();
  1066.       if (shrink_factor != 1) bak_shrink = shrink_factor;
  1067.       mane.shrinkfactor = shrink_factor;
  1068. !     if (RESOURCE(debug_arg) != NULL)
  1069. !         debug = isdigit(*RESOURCE(debug_arg)) ? atoi(RESOURCE(debug_arg))
  1070. !         : DBG_ALL;
  1071. !     if (RESOURCE(sidemargin)) home_x = atopix(RESOURCE(sidemargin));
  1072. !     if (RESOURCE(topmargin)) home_y = atopix(RESOURCE(topmargin));
  1073. !     offset_x = RESOURCE(xoffset) ? atopix(RESOURCE(xoffset))
  1074. !         : pixels_per_inch;
  1075. !     offset_y = RESOURCE(yoffset) ? atopix(RESOURCE(yoffset))
  1076. !         : pixels_per_inch;
  1077. !     if (!set_paper_type()) oops("Don't recognize paper type %s",
  1078. !         RESOURCE(paper));
  1079.   
  1080.       init_font_open();
  1081.       open_dvi_file();
  1082. ***************
  1083. *** 2570,2576 ****
  1084.           current_page = (*curr_page ? atoi(curr_page) : total_pages) - 1;
  1085.           if (current_page < 0 || current_page >= total_pages) usage();
  1086.       }
  1087. !     if (version) puts((_Xconst char *) &header);
  1088.   
  1089.   #ifdef    GREY
  1090.       if (DefaultDepthOfScreen(SCRN) == 1)
  1091. --- 2634,2640 ----
  1092.           current_page = (*curr_page ? atoi(curr_page) : total_pages) - 1;
  1093.           if (current_page < 0 || current_page >= total_pages) usage();
  1094.       }
  1095. !     if (RESOURCE(version)) puts((_Xconst char *) &header);
  1096.   
  1097.   #ifdef    GREY
  1098.       if (DefaultDepthOfScreen(SCRN) == 1)
  1099. ***************
  1100. *** 2585,2613 ****
  1101.        *    X11 colors
  1102.        */
  1103.   
  1104. !     if (reverse) {
  1105. !         if (!fore_color) fore_Pixel = WhitePixelOfScreen(SCRN);
  1106. !         if (!back_color) back_Pixel = BlackPixelOfScreen(SCRN);
  1107. !         fore_color = back_color = (char *) &fore_color;    /* nonzero */
  1108.       } else {
  1109. !         if (!fore_color) fore_Pixel = BlackPixelOfScreen(SCRN);
  1110. !         if (!back_color) back_Pixel = WhitePixelOfScreen(SCRN);
  1111.       }
  1112. !     if (!brdr_color) brdr_Pixel = fore_Pixel;
  1113.       {
  1114.           XGCValues    values;
  1115. !         Pixel    set_bits = (Pixel) (fore_Pixel & ~back_Pixel);
  1116. !         Pixel    clr_bits = (Pixel) (back_Pixel & ~fore_Pixel);
  1117.   #define    MakeGC(fcn, fg, bg)    (values.function = fcn, values.foreground=fg,\
  1118.           values.background=bg,\
  1119.           XCreateGC(DISP, RootWindowOfScreen(SCRN),\
  1120.               GCFunction|GCForeground|GCBackground, &values))
  1121.   
  1122. !         if (copy == 2) copy = (DefaultDepthOfScreen(SCRN) > 1);
  1123. !         if (copy || (set_bits && clr_bits))
  1124. !         ruleGC = MakeGC(GXcopy, fore_Pixel, back_Pixel);
  1125. !         if (copy) foreGC = ruleGC;
  1126. !         else if (!thorough && ruleGC) {
  1127.           foreGC = ruleGC;
  1128.           puts("Note:  overstrike characters may be incorrect.");
  1129.           }
  1130. --- 2649,2690 ----
  1131.        *    X11 colors
  1132.        */
  1133.   
  1134. !     if (RESOURCE(reverse)) {
  1135. !         if (!RESOURCE(fore_color))
  1136. !         RESOURCE(fore_Pixel) = WhitePixelOfScreen(SCRN);
  1137. !         if (!RESOURCE(back_color))
  1138. !         RESOURCE(back_Pixel) = BlackPixelOfScreen(SCRN);
  1139. !         /* Set them nonzero */
  1140. !         RESOURCE(fore_color) = RESOURCE(back_color) = (char *) &header;
  1141.       } else {
  1142. !         if (!RESOURCE(fore_color))
  1143. !         RESOURCE(fore_Pixel) = BlackPixelOfScreen(SCRN);
  1144. !         if (!RESOURCE(back_color))
  1145. !         RESOURCE(back_Pixel) = WhitePixelOfScreen(SCRN);
  1146.       }
  1147. !     if (!RESOURCE(brdr_color)) RESOURCE(brdr_Pixel) = RESOURCE(fore_Pixel);
  1148.       {
  1149.           XGCValues    values;
  1150. !         Pixel    set_bits = (Pixel)
  1151. !                 (RESOURCE(fore_Pixel) & ~RESOURCE(back_Pixel));
  1152. !         Pixel    clr_bits = (Pixel)
  1153. !                 (RESOURCE(back_Pixel) & ~RESOURCE(fore_Pixel));
  1154.   #define    MakeGC(fcn, fg, bg)    (values.function = fcn, values.foreground=fg,\
  1155.           values.background=bg,\
  1156.           XCreateGC(DISP, RootWindowOfScreen(SCRN),\
  1157.               GCFunction|GCForeground|GCBackground, &values))
  1158.   
  1159. ! #ifdef    TOOLKIT
  1160. !         if (resource.copy_arg)
  1161. ! #else
  1162. !         if (copy == 2)
  1163. ! #endif
  1164. !         RESOURCE(copy) = (DefaultDepthOfScreen(SCRN) > 1);
  1165. !         if (RESOURCE(copy) || (set_bits && clr_bits))
  1166. !         ruleGC = MakeGC(GXcopy,
  1167. !             RESOURCE(fore_Pixel), RESOURCE(back_Pixel));
  1168. !         if (RESOURCE(copy)) foreGC = ruleGC;
  1169. !         else if (!RESOURCE(thorough) && ruleGC) {
  1170.           foreGC = ruleGC;
  1171.           puts("Note:  overstrike characters may be incorrect.");
  1172.           }
  1173. ***************
  1174. *** 2619,2626 ****
  1175.           if (!ruleGC) ruleGC = foreGC;
  1176.           }
  1177.           highGC = ruleGC;
  1178. !         if (high_color)
  1179. !         highGC = MakeGC(GXcopy, hl_Pixel, back_Pixel);
  1180.       }
  1181.   
  1182.   #ifndef    VMS
  1183. --- 2696,2704 ----
  1184.           if (!ruleGC) ruleGC = foreGC;
  1185.           }
  1186.           highGC = ruleGC;
  1187. !         if (RESOURCE(high_color))
  1188. !         highGC = MakeGC(GXcopy,
  1189. !             RESOURCE(hl_Pixel), RESOURCE(back_Pixel));
  1190.       }
  1191.   
  1192.   #ifndef    VMS
  1193. ***************
  1194. *** 2631,2651 ****
  1195.       XSetFont(DISP, foreGC, DECWCursorFont);
  1196.       redraw_cursor = XCreateGlyphCursor(DISP, DECWCursorFont, DECWCursorFont,
  1197.           decw$c_wait_cursor, decw$c_wait_cursor + 1,
  1198. !         &fore_color, &back_color);
  1199.       MagnifyPixmap = XCreateBitmapFromData (DISP, RootWindowOfScreen(SCRN),
  1200.           mag_glass_bits, mag_glass_width, mag_glass_height);
  1201.       ready_cursor = XCreatePixmapCursor(DISP, MagnifyPixmap, MagnifyPixmap,
  1202. !         &back_color, &fore_color, mag_glass_x_hot, mag_glass_y_hot);
  1203.   #endif    /* VMS */
  1204.   
  1205. !     if (!curs_color)
  1206. !         cr_Pixel = high_color ? hl_Pixel : fore_Pixel;
  1207.       {
  1208.           XColor bg_Color, cr_Color;
  1209.   
  1210. !         bg_Color.pixel = back_Pixel;
  1211.           XQueryColor(DISP, DefaultColormapOfScreen(SCRN), &bg_Color);
  1212. !         cr_Color.pixel = cr_Pixel;
  1213.           XQueryColor(DISP, DefaultColormapOfScreen(SCRN), &cr_Color);
  1214.           XRecolorCursor(DISP, ready_cursor, &cr_Color, &bg_Color);
  1215.           XRecolorCursor(DISP, redraw_cursor, &cr_Color, &bg_Color);
  1216. --- 2709,2731 ----
  1217.       XSetFont(DISP, foreGC, DECWCursorFont);
  1218.       redraw_cursor = XCreateGlyphCursor(DISP, DECWCursorFont, DECWCursorFont,
  1219.           decw$c_wait_cursor, decw$c_wait_cursor + 1,
  1220. !         &RESOURCE(fore_color), &RESOURCE(back_color));
  1221.       MagnifyPixmap = XCreateBitmapFromData (DISP, RootWindowOfScreen(SCRN),
  1222.           mag_glass_bits, mag_glass_width, mag_glass_height);
  1223.       ready_cursor = XCreatePixmapCursor(DISP, MagnifyPixmap, MagnifyPixmap,
  1224. !         &RESOURCE(back_color), &RESOURCE(fore_color),
  1225. !         mag_glass_x_hot, mag_glass_y_hot);
  1226.   #endif    /* VMS */
  1227.   
  1228. !     if (!RESOURCE(curs_color))
  1229. !         RESOURCE(cr_Pixel) = RESOURCE(high_color) ? RESOURCE(hl_Pixel)
  1230. !         : RESOURCE(fore_Pixel);
  1231.       {
  1232.           XColor bg_Color, cr_Color;
  1233.   
  1234. !         bg_Color.pixel = RESOURCE(back_Pixel);
  1235.           XQueryColor(DISP, DefaultColormapOfScreen(SCRN), &bg_Color);
  1236. !         cr_Color.pixel = RESOURCE(cr_Pixel);
  1237.           XQueryColor(DISP, DefaultColormapOfScreen(SCRN), &cr_Color);
  1238.           XRecolorCursor(DISP, ready_cursor, &cr_Color, &bg_Color);
  1239.           XRecolorCursor(DISP, redraw_cursor, &cr_Color, &bg_Color);
  1240. ***************
  1241. *** 2658,2664 ****
  1242.        */
  1243.   
  1244.           /* The following code is lifted from Xterm */
  1245. !     if (icon_geometry != NULL) {
  1246.           int scr, junk;
  1247.   
  1248.           for(scr = 0;    /* yyuucchh */
  1249. --- 2738,2744 ----
  1250.        */
  1251.   
  1252.           /* The following code is lifted from Xterm */
  1253. !     if (resource.icon_geometry != NULL) {
  1254.           int scr, junk;
  1255.   
  1256.           for(scr = 0;    /* yyuucchh */
  1257. ***************
  1258. *** 2665,2671 ****
  1259.           SCRN != ScreenOfDisplay(DISP, scr);
  1260.           scr++);
  1261.   
  1262. !         XGeometry(DISP, scr, icon_geometry, "", 0, 0, 0, 0, 0,
  1263.               (int *) &temp_args1[0].value,
  1264.               (int *) &temp_args1[1].value, &junk, &junk);
  1265.           XtSetValues(top_level, temp_args1, XtNumber(temp_args1));
  1266. --- 2745,2751 ----
  1267.           SCRN != ScreenOfDisplay(DISP, scr);
  1268.           scr++);
  1269.   
  1270. !         XGeometry(DISP, scr, resource.icon_geometry, "", 0, 0, 0, 0, 0,
  1271.               (int *) &temp_args1[0].value,
  1272.               (int *) &temp_args1[1].value, &junk, &junk);
  1273.           XtSetValues(top_level, temp_args1, XtNumber(temp_args1));
  1274. ***************
  1275. *** 2685,2691 ****
  1276.       form_widget = XtCreateManagedWidget("form", formWidgetClass,
  1277.           top_level, form_args, XtNumber(form_args));
  1278.   
  1279. !     line_args[0].value = (XtArgVal) high_color ? hl_Pixel : fore_Pixel;
  1280.   #else    /* !BUTTONS */
  1281.   #define    form_widget    top_level    /* for calls to XtAddEventHandler */
  1282.   #endif    /* BUTTONS */
  1283. --- 2765,2772 ----
  1284.       form_widget = XtCreateManagedWidget("form", formWidgetClass,
  1285.           top_level, form_args, XtNumber(form_args));
  1286.   
  1287. !     line_args[0].value = (XtArgVal) resource.high_color
  1288. !         ? resource.hl_Pixel : resource.fore_Pixel;
  1289.   #else    /* !BUTTONS */
  1290.   #define    form_widget    top_level    /* for calls to XtAddEventHandler */
  1291.   #endif    /* BUTTONS */
  1292. ***************
  1293. *** 2698,2704 ****
  1294.           vport_widget, draw_args, XtNumber(draw_args));
  1295.       {    /* set default window size */
  1296.   #ifdef    BUTTONS
  1297. !         int xtra_wid = expert ? 0 : XTRA_WID;
  1298.   #else
  1299.   #define    xtra_wid    0
  1300.   #endif
  1301. --- 2779,2785 ----
  1302.           vport_widget, draw_args, XtNumber(draw_args));
  1303.       {    /* set default window size */
  1304.   #ifdef    BUTTONS
  1305. !         int xtra_wid = resource.expert ? 0 : XTRA_WID;
  1306.   #else
  1307.   #define    xtra_wid    0
  1308.   #endif
  1309. ***************
  1310. *** 2734,2744 ****
  1311.   #ifdef    BUTTONS
  1312.           set_wh_args[0].value -= xtra_wid;
  1313.           XtSetValues(vport_widget, set_wh_args, XtNumber(set_wh_args));
  1314. !         if (!expert) create_buttons(set_wh_args[1].value);
  1315.   #endif    /* BUTTONS */
  1316.       }
  1317. !     if (fore_color) XtSetValues(draw_widget, &fore_args, 1);
  1318. !     if (back_color) {
  1319.           XtSetValues(draw_widget, &back_args, 1);
  1320.           XtSetValues(clip_widget, &back_args, 1);
  1321.       }
  1322. --- 2815,2833 ----
  1323.   #ifdef    BUTTONS
  1324.           set_wh_args[0].value -= xtra_wid;
  1325.           XtSetValues(vport_widget, set_wh_args, XtNumber(set_wh_args));
  1326. !         if (!resource.expert) create_buttons(set_wh_args[1].value);
  1327.   #endif    /* BUTTONS */
  1328.       }
  1329. !     if (resource.fore_color) {
  1330. !         static Arg fore_args = {XtNforeground, (XtArgVal) 0};
  1331. !         fore_args.value = resource.fore_Pixel;
  1332. !         XtSetValues(draw_widget, &fore_args, 1);
  1333. !     }
  1334. !     if (resource.back_color) {
  1335. !         static Arg back_args = {XtNbackground, (XtArgVal) 0};
  1336. !         back_args.value = resource.back_Pixel;
  1337.           XtSetValues(draw_widget, &back_args, 1);
  1338.           XtSetValues(clip_widget, &back_args, 1);
  1339.       }
  1340. diff -cr xdvi_old/xdvi.h xdvi_new/xdvi.h
  1341. *** xdvi_old/xdvi.h    Mon Jun  1 16:28:20 1992
  1342. --- xdvi_new/xdvi.h    Tue Jun 16 14:18:59 1992
  1343. ***************
  1344. *** 106,111 ****
  1345. --- 106,112 ----
  1346.   #ifndef    EXTERN
  1347.   #define    EXTERN    extern
  1348.   #define    INIT(x)
  1349. + #define    NTINIT(x)
  1350.   #endif
  1351.   
  1352.   typedef    unsigned char ubyte;
  1353. ***************
  1354. *** 219,227 ****
  1355.   /*
  1356.    * Mechanism for reducing repeated warning about specials, lost characters, etc.
  1357.    */
  1358. ! EXTERN    Boolean    hush_spec    INIT(False);
  1359.   EXTERN    Boolean    hush_spec_now;
  1360. ! EXTERN    Boolean    hush_chars    INIT(False);
  1361.   
  1362.   
  1363.   /*
  1364. --- 220,228 ----
  1365.   /*
  1366.    * Mechanism for reducing repeated warning about specials, lost characters, etc.
  1367.    */
  1368. ! EXTERN    Boolean    hush_spec    NTINIT(False);
  1369.   EXTERN    Boolean    hush_spec_now;
  1370. ! EXTERN    Boolean    hush_chars    NTINIT(False);
  1371.   
  1372.   
  1373.   /*
  1374. ***************
  1375. *** 334,351 ****
  1376.   #define    DBG_OPEN    0x20
  1377.   #define    DBG_ALL        (DBG_BITMAP|DBG_DVI|DBG_PK|DBG_EVENT|DBG_OPEN)
  1378.   
  1379. ! EXTERN    Boolean    list_fonts    INIT(False);
  1380.   
  1381. ! EXTERN    int    pixels_per_inch    INIT(300);
  1382.   EXTERN    int    offset_x, offset_y;
  1383.   EXTERN    int    unshrunk_paper_w, unshrunk_paper_h;
  1384.   EXTERN    int    unshrunk_page_w, unshrunk_page_h;
  1385. ! EXTERN    int    density        INIT(40);
  1386.   EXTERN    double    specialConv;
  1387.   
  1388.   EXTERN    char    *dvi_name    INIT(NULL);
  1389.   EXTERN    FILE    *dvi_file;                /* user's file */
  1390. ! EXTERN    _Xconst    char    *alt_font    INIT(ALTFONT);
  1391.   EXTERN    char    *prog;
  1392.   
  1393.   struct    WindowRec {
  1394. --- 335,352 ----
  1395.   #define    DBG_OPEN    0x20
  1396.   #define    DBG_ALL        (DBG_BITMAP|DBG_DVI|DBG_PK|DBG_EVENT|DBG_OPEN)
  1397.   
  1398. ! EXTERN    Boolean    list_fonts    NTINIT(False);
  1399.   
  1400. ! EXTERN    int    pixels_per_inch    NTINIT(300);
  1401.   EXTERN    int    offset_x, offset_y;
  1402.   EXTERN    int    unshrunk_paper_w, unshrunk_paper_h;
  1403.   EXTERN    int    unshrunk_page_w, unshrunk_page_h;
  1404. ! EXTERN    int    density        NTINIT(40);
  1405.   EXTERN    double    specialConv;
  1406.   
  1407.   EXTERN    char    *dvi_name    INIT(NULL);
  1408.   EXTERN    FILE    *dvi_file;                /* user's file */
  1409. ! EXTERN    _Xconst    char    *alt_font    NTINIT(ALTFONT);
  1410.   EXTERN    char    *prog;
  1411.   
  1412.   struct    WindowRec {
  1413. ***************
  1414. *** 370,376 ****
  1415.   EXTERN    long    pixel4[17];
  1416.   EXTERN    long    pixel3[10];
  1417.   EXTERN    long    pixel2[5];
  1418. ! EXTERN    Boolean    use_grey    INIT(True);
  1419.   #else    /* Sorry - GREY works only with X11 */
  1420.   #undef    GREY
  1421.   #endif    /* X10 */
  1422. --- 371,377 ----
  1423.   EXTERN    long    pixel4[17];
  1424.   EXTERN    long    pixel3[10];
  1425.   EXTERN    long    pixel2[5];
  1426. ! EXTERN    Boolean    use_grey    NTINIT(True);
  1427.   #else    /* Sorry - GREY works only with X11 */
  1428.   #undef    GREY
  1429.   #endif    /* X10 */
  1430. diff -cr xdvi_old/xdvi_man.sed xdvi_new/xdvi_man.sed
  1431. *** xdvi_old/xdvi_man.sed    Sun Jun  7 11:36:01 1992
  1432. --- xdvi_new/xdvi_man.sed    Fri Jun 19 12:51:18 1992
  1433. ***************
  1434. *** 170,178 ****
  1435.   Always use the \fIcopy\fR operation when writing characters to the display.
  1436.   This option may be necessary for correct operation on a color display, but
  1437.   overstrike characters will be incorrect.
  1438.   .TP
  1439.   .B \-keep
  1440. ! (.keepPosition)
  1441.   Sets a flag to indicate that \fIxdvi\fR should not move to the home position
  1442.   when moving to a new page.  See also the `k' keystroke.
  1443.   #ifbuttons
  1444. --- 170,179 ----
  1445.   Always use the \fIcopy\fR operation when writing characters to the display.
  1446.   This option may be necessary for correct operation on a color display, but
  1447.   overstrike characters will be incorrect.
  1448. + #endif
  1449.   .TP
  1450.   .B \-keep
  1451. ! (%%dot%%keepPosition)
  1452.   Sets a flag to indicate that \fIxdvi\fR should not move to the home position
  1453.   when moving to a new page.  See also the `k' keystroke.
  1454.   #ifbuttons
  1455. ***************
  1456. *** 419,425 ****
  1457.   /usr/local/tex/fonts/cmr10.300pk, and /usr/local/tex/fonts/cmr10.1500pxl,
  1458.   in that order.  An extra colon anywhere in the ``XDVIFONTS'' variable
  1459.   causes the system default paths to be tried at that point.  If the font is not
  1460. ! found in the desired size, then \fIxdvi\fR will try to find the nearest size.
  1461.   If the font cannot be found at all, then \fIxdvi\fR will try to vary the point
  1462.   size of the font (within a certain range), and if this fails, then it will
  1463.   use the font specified as the alternate font (cf. \fB-altfont\fR).
  1464. --- 420,430 ----
  1465.   /usr/local/tex/fonts/cmr10.300pk, and /usr/local/tex/fonts/cmr10.1500pxl,
  1466.   in that order.  An extra colon anywhere in the ``XDVIFONTS'' variable
  1467.   causes the system default paths to be tried at that point.  If the font is not
  1468. ! found in the desired size, then \fIxdvi\fR will
  1469. ! #ifmakepk
  1470. ! invoke Metafont to create the font in the correct size.  Failing that, it will
  1471. ! #endif
  1472. ! try to find the nearest size.
  1473.   If the font cannot be found at all, then \fIxdvi\fR will try to vary the point
  1474.   size of the font (within a certain range), and if this fails, then it will
  1475.   use the font specified as the alternate font (cf. \fB-altfont\fR).
  1476. ***************
  1477. *** 438,443 ****
  1478. --- 443,451 ----
  1479.   explicitly, and therefore this feature is not useful, the XDVIFONTS may
  1480.   be set to an empty string (\fIi.e.,\fR ``setenv XDVIFONTS'') to cause
  1481.   \fIxdvi\fR to ignore TEXFONTS.
  1482. + .PP
  1483. + \fIxdvi\fR also recognizes the PKFONTS variable, which is checked after
  1484. + XDVIFONTS but before TEXFONTS.
  1485.   #endif
  1486.   #ifsubdir
  1487.   .PP
  1488. ***************
  1489. *** 465,473 ****
  1490.   Virtual fonts are also supported, although \fIxdvi\fR does not have any
  1491.   built-in fonts to which they can refer.  The search path for .vf files
  1492.   can be specified with the ``XDVIVFS'' environment variable in a similar
  1493. ! manner to that for the ``XDVIFONTS'' variable.  Virtual fonts are searched
  1494. ! for immediately after looking for the font as a normal font in the exact size
  1495. ! specified.
  1496.   .SH FILES
  1497.   .br
  1498.   %%DEFAULT_FONT_PATH%%   Font pixel files.
  1499. --- 473,485 ----
  1500.   Virtual fonts are also supported, although \fIxdvi\fR does not have any
  1501.   built-in fonts to which they can refer.  The search path for .vf files
  1502.   can be specified with the ``XDVIVFS'' environment variable in a similar
  1503. ! manner to that for the ``XDVIFONTS'' variable.
  1504. ! #iftexfonts
  1505. ! \fIxdvi\fR will also check the VFFONTS variable if the XDVIFONTS variable
  1506. ! is not set.
  1507. ! #endif
  1508. ! Virtual fonts are searched for immediately after looking for the font
  1509. ! as a normal font in the exact size specified.
  1510.   .SH FILES
  1511.   .br
  1512.   %%DEFAULT_FONT_PATH%%   Font pixel files.
  1513. -- 
  1514. --
  1515. Molecular Simulations, Inc.            mail: dcmartin@msi.com
  1516. 796 N. Pastoria Avenue                uucp: uunet!dcmartin
  1517. Sunnyvale, California 94086            at&t: 408/522-9236
  1518.