home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / x / volume5 / xdvi / patch6a next >
Internet Message Format  |  1989-12-05  |  37KB

  1. Path: uunet!island!guinness.ias.edu
  2. From: vojta@guinness.ias.edu (Paul A Vojta)
  3. Newsgroups: comp.sources.x
  4. Subject: v05i035: xdvi, dvi previewer, patch 6, part 1/2
  5. Message-ID: <1230@island.uu.net>
  6. Date: 5 Dec 89 18:42:43 GMT
  7. Sender: argv@island.uu.net
  8. Lines: 1160
  9. Approved: island!argv@sun.com
  10.  
  11. Submitted-by: vojta@guinness.ias.edu (Paul A Vojta)
  12. Posting-number: Volume 5, Issue 35
  13. Archive-name: xdvi/patch6
  14. Patch-To: xdvi: Volume 3, Issue 37-39,46,67
  15. Patch-To: xdvi: Volume 4, Issue 44,96
  16.  
  17. Here is patch 6 for Xdvi.  It incorporates a number of enhancements,
  18. including a more robust font searching algorithm (and note the new
  19. installation instructions), optional command buttons for commonly used
  20. commands, options to change the page size, and I fixed the bug where
  21. void * was tripping up some compilers.
  22.  
  23. For suggestions, bugs, and fixes, I owe thanks to:
  24.     Kevin Gates (kevin@amath.washington.edu)
  25.     Phil Dykstra (phil@BRL.MIL)
  26.     Paul Raveling (raveling@venera.isi.edu)
  27.     Dan Riley (riley@tcgould.tn.cornell.edu)
  28.     Piet Tutelaers (rcpt@eutrc4.urc.tue.nl)
  29.  
  30. --Paul Vojta, vojta@guinness.ias.edu (new address)
  31.  
  32. --- cut here ---
  33. diff -cr old/AUTHOR new/AUTHOR
  34. *** old/AUTHOR    Fri Nov 17 21:22:49 1989
  35. --- new/AUTHOR    Fri Nov 17 21:34:09 1989
  36. ***************
  37. *** 9,16 ****
  38.       Jeffrey Lee, U of Toronto
  39.       Donald Richardson, Clarkson Univ.
  40.   At the present time, the person to send bug reports to is Paul Vojta,
  41.       vojta@math.berkeley.edu.
  42. - This address will be valid at least through August, 1989.
  43.   
  44.   In addition to the various comp.sources.x archives, current versions of this
  45.   program can also be obtained via anonymous ftp from the following locations:
  46. --- 9,16 ----
  47.       Jeffrey Lee, U of Toronto
  48.       Donald Richardson, Clarkson Univ.
  49.   At the present time, the person to send bug reports to is Paul Vojta,
  50. +     vojta@guinness.ias.edu    (temporary; valid through May '90)
  51.       vojta@math.berkeley.edu.
  52.   
  53.   In addition to the various comp.sources.x archives, current versions of this
  54.   program can also be obtained via anonymous ftp from the following locations:
  55. diff -cr old/Imakefile new/Imakefile
  56. *** old/Imakefile    Fri Nov 17 21:22:51 1989
  57. --- new/Imakefile    Fri Nov 17 22:06:15 1989
  58. ***************
  59. *** 1,26 ****
  60. - FONT_PATH=TEXFONTS
  61.   DEFAULT_FONT_PATH=/usr/local/tex/fonts
  62.   FONTFORMATS_C=gf.c pk.c pxl.c
  63.   FONTFORMATS_O=gf.o pk.o pxl.o
  64.   
  65. ! DEFINES=-DMSBITFIRST \
  66. !   -DBMSHORT \
  67. !   -DFONT_PATH=\"$(FONT_PATH)\" \
  68. !   -DDEFAULT_FONT_PATH=\"$(DEFAULT_FONT_PATH)\"
  69. ! SYSLAST_LIBRARIES=-lXaw -lXmu -lXt -lX11 -lm
  70.   SRCS=xdvi.c dvi_init.c dvi_draw.c $(FONTFORMATS_C) pxl_open.c tpic.c
  71.   OBJS=xdvi.o dvi_init.o dvi_draw.o $(FONTFORMATS_O) pxl_open.o tpic.o
  72.   
  73.   ComplexProgramTarget(xdvi)
  74.   
  75. ! xdvi.man:
  76. !     sed -e "s;%%FONT_PATH%%;$(FONT_PATH);g" \
  77. !         -e "s;%%DEFAULT_FONT_PATH%%;$(DEFAULT_FONT_PATH);g" \
  78. !         < xdvi.man.sed \
  79. !         > xdvi.man
  80.   
  81.   clean::
  82. !     $(RM) xdvi.man
  83.   
  84.   lint::
  85. !     lint $(INCLUDES) $(DEFINES) $(SRCS)
  86. --- 1,29 ----
  87.   DEFAULT_FONT_PATH=/usr/local/tex/fonts
  88. + DEFAULT_FONT_SIZES=300:328.6:360:432:518.4:622:746.4
  89. + DEFINES=-DMSBITFIRST \
  90. +   -DBMSHORT
  91. + FONTDEFINES=-DDEFAULT_FONT_PATH=\"$(DEFAULT_FONT_PATH)\" \
  92. +   -DDEFAULT_FONT_SIZES=\"$(DEFAULT_FONT_SIZES)\"
  93.   FONTFORMATS_C=gf.c pk.c pxl.c
  94.   FONTFORMATS_O=gf.o pk.o pxl.o
  95.   
  96. ! LOCAL_LIBRARIES=$(XAWLIB) $(XMULIB) $(XTOOLLIB) $(XLIB) -lm
  97.   SRCS=xdvi.c dvi_init.c dvi_draw.c $(FONTFORMATS_C) pxl_open.c tpic.c
  98.   OBJS=xdvi.o dvi_init.o dvi_draw.o $(FONTFORMATS_O) pxl_open.o tpic.o
  99.   
  100.   ComplexProgramTarget(xdvi)
  101.   
  102. ! pxl_open.o:
  103. !     $(CC) -c $(CFLAGS) $(FONTDEFINES) pxl_open.c
  104.   
  105. + xdvi.man: xdvi.man.sed
  106. +     chmod u+x mksedscript
  107. +     mksedscript $(DEFAULT_FONT_PATH) $(DEFAULT_FONT_SIZES) $(DEFINES) \
  108. +         > sedscript
  109. +     sed -f sedscript < xdvi.man.sed > xdvi.man
  110.   clean::
  111. !     $(RM) sedscript xdvi.man xdvi10.man.s
  112.   
  113.   lint::
  114. !     $(LINT) $(INCLUDES) $(DEFINES) $(FONTDEFINES) $(SRCS)
  115. diff -cr old/Makefile new/Makefile
  116. *** old/Makefile    Fri Nov 17 21:22:52 1989
  117. --- new/Makefile    Fri Nov 17 22:06:09 1989
  118. ***************
  119. *** 4,15 ****
  120.   # $Header: Makefile,v 1.2 87/05/14 14:05:34 eichin Locked $
  121.   # $Source: /u1/uus/vs2/xdvi/RCS/Makefile,v $
  122.   #
  123. - FONT_PATH=TEXFONTS
  124.   DEFAULT_FONT_PATH=/usr/local/tex/fonts
  125.   DEFINES=-DMSBITFIRST \
  126. !   -DBMSHORT \
  127. !   -DFONT_PATH=\"$(FONT_PATH)\" \
  128. !   -DDEFAULT_FONT_PATH=\"$(DEFAULT_FONT_PATH)\"
  129.   FONTFORMATS_C=gf.c pk.c pxl.c
  130.   FONTFORMATS_O=gf.o pk.o pxl.o
  131.   LIBDIR=/usr/custom/x11/lib
  132. --- 4,15 ----
  133.   # $Header: Makefile,v 1.2 87/05/14 14:05:34 eichin Locked $
  134.   # $Source: /u1/uus/vs2/xdvi/RCS/Makefile,v $
  135.   #
  136.   DEFAULT_FONT_PATH=/usr/local/tex/fonts
  137. + DEFAULT_FONT_SIZES=300:328.6:360:432:518.4:622:746.4
  138.   DEFINES=-DMSBITFIRST \
  139. !   -DBMSHORT
  140. ! FONTDEFINES=-DDEFAULT_FONT_PATH=\"$(DEFAULT_FONT_PATH)\" \
  141. !   -DDEFAULT_FONT_SIZES=\"$(DEFAULT_FONT_SIZES)\"
  142.   FONTFORMATS_C=gf.c pk.c pxl.c
  143.   FONTFORMATS_O=gf.o pk.o pxl.o
  144.   LIBDIR=/usr/custom/x11/lib
  145. ***************
  146. *** 18,30 ****
  147.   #INCDIR=/tuna_a/x11r3/include
  148.   XMULIB=
  149.   #XMULIB=-lXmu
  150. ! DESTDIR=
  151. ! BINDIR=/usr/sipb/$$(MACHTYPE)bin
  152.   INCLUDES=-I$(INCDIR)
  153.   CFLAGS=-O $(INCLUDES) $(DEFINES)
  154.   LIBS=-L$(LIBDIR) -lXaw $(XMULIB) -lXt -lX11 -lm
  155. ! SRCS=xdvi.c dvi_init.c dvi_draw.c $(FONTFORMATS_C) pxl_open.c tpic.c \
  156. !   xdvi.h dvi.h xdvi.icon
  157.   OBJS=xdvi.o dvi_init.o dvi_draw.o $(FONTFORMATS_O) pxl_open.o tpic.o
  158.   CC=/tuna_a/gnu/bin/gcc
  159.   RM=rm -f
  160. --- 18,30 ----
  161.   #INCDIR=/tuna_a/x11r3/include
  162.   XMULIB=
  163.   #XMULIB=-lXmu
  164. ! DESTDIR=/usr/local/x11
  165. ! BINDIR=$(DESTDIR)/bin
  166. ! MANDIR=$(DESTDIR)/man
  167.   INCLUDES=-I$(INCDIR)
  168.   CFLAGS=-O $(INCLUDES) $(DEFINES)
  169.   LIBS=-L$(LIBDIR) -lXaw $(XMULIB) -lXt -lX11 -lm
  170. ! SRCS=xdvi.c dvi_init.c dvi_draw.c $(FONTFORMATS_C) pxl_open.c tpic.c
  171.   OBJS=xdvi.o dvi_init.o dvi_draw.o $(FONTFORMATS_O) pxl_open.o tpic.o
  172.   CC=/tuna_a/gnu/bin/gcc
  173.   RM=rm -f
  174. ***************
  175. *** 45,62 ****
  176.   pk.o:    xdvi.h
  177.   pxl.o:    xdvi.h
  178.   
  179.   xdvi.man: xdvi.man.sed
  180. !     sed -e "s;%%FONT_PATH%%;$(FONT_PATH);g" \
  181. !         -e "s;%%DEFAULT_FONT_PATH%%;$(DEFAULT_FONT_PATH);g" \
  182. !         < xdvi.man.sed \
  183. !         > xdvi.man
  184.   
  185. ! install: all
  186. !     install -c -s xdvi $(DESTDIR)$(BINDIR)
  187.   
  188.   clean:
  189. !     $(RM) *.o *.BAK *.CKP xdvi.man xdvi a.out core errs *~
  190.   
  191.   lint:
  192. !     lint $(INCLUDES) $(DEFINES) xdvi.c dvi_init.c dvi_draw.c \
  193. !         $(FONTFORMATS_C) pxl_open.c tpic.c
  194. --- 45,66 ----
  195.   pk.o:    xdvi.h
  196.   pxl.o:    xdvi.h
  197.   
  198. + pxl_open.o:
  199. +     $(CC) -c $(CFLAGS) $(FONTDEFINES) pxl_open.c
  200.   xdvi.man: xdvi.man.sed
  201. !     chmod u+x mksedscript
  202. !     mksedscript $(DEFAULT_FONT_PATH) $(DEFAULT_FONT_SIZES) $(DEFINES) \
  203. !         > sedscript
  204. !     sed -f sedscript < xdvi.man.sed > xdvi.man
  205.   
  206. ! install: xdvi xdvi.man
  207. !     install -c -s -m 755 xdvi $(BINDIR)
  208. !     install -c -m 644 xdvi.man $(MANDIR)/man1/xdvi.1
  209.   
  210.   clean:
  211. !     $(RM) *.o *.BAK *.CKP sedscript xdvi.man xdvi a.out core errs *~
  212. !     $(RM) xdvi10.man.s
  213.   
  214.   lint:
  215. !     lint $(INCLUDES) $(DEFINES) $(FONTDEFINES) $(SRCS)
  216. diff -cr old/Makefile_10 new/Makefile_10
  217. *** old/Makefile_10    Fri Nov 17 21:22:53 1989
  218. --- new/Makefile_10    Fri Nov 17 22:06:22 1989
  219. ***************
  220. *** 4,23 ****
  221.   # $Header: Makefile,v 1.2 87/05/14 14:05:34 eichin Locked $
  222.   # $Source: /u1/uus/vs2/xdvi/RCS/Makefile,v $
  223.   #
  224. - FONT_PATH=TEXFONTS
  225.   DEFAULT_FONT_PATH=/usr/local/tex/fonts
  226. ! DEFINES=-DX10 \
  227. !   -DFONT_PATH=\"$(FONT_PATH)\" \
  228. !   -DDEFAULT_FONT_PATH=\"$(DEFAULT_FONT_PATH)\"
  229.   FONTFORMATS_C=gf.c pk.c pxl.c
  230.   FONTFORMATS_O=gf.o pk.o pxl.o
  231. ! DESTDIR=
  232. ! BINDIR=/usr/sipb/$$(MACHTYPE)bin
  233. ! INCLUDES=-I/usr/include/X
  234. ! CFLAGS=-O $(DEFINES)
  235.   LIBS=-lX -lm
  236. ! SRCS=xdvi.c dvi_init.c dvi_draw.c $(FONTFORMATS_C) pxl_open.c tpic.c \
  237. !   xdvi.h dvi.h xdvi_curs.h xdvi_mask.h
  238.   OBJS=xdvi.o dvi_init.o dvi_draw.o $(FONTFORMATS_O) pxl_open.o tpic.o
  239.   CC=/tuna_a/gnu/bin/gcc
  240.   RM=rm -f
  241. --- 4,23 ----
  242.   # $Header: Makefile,v 1.2 87/05/14 14:05:34 eichin Locked $
  243.   # $Source: /u1/uus/vs2/xdvi/RCS/Makefile,v $
  244.   #
  245.   DEFAULT_FONT_PATH=/usr/local/tex/fonts
  246. ! DEFAULT_FONT_SIZES=300:328.6:360:432:518.4:622:746.4
  247. ! DEFINES=-DX10
  248. ! FONTDEFINES=-DDEFAULT_FONT_PATH=\"$(DEFAULT_FONT_PATH)\" \
  249. !   -DDEFAULT_FONT_SIZES=\"$(DEFAULT_FONT_SIZES)\"
  250.   FONTFORMATS_C=gf.c pk.c pxl.c
  251.   FONTFORMATS_O=gf.o pk.o pxl.o
  252. ! DESTDIR=/usr/local/x10
  253. ! BINDIR=$(DESTDIR)/bin
  254. ! MANDIR=$(DESTDIR)/man
  255. ! #INCLUDES=-I/usr/include/X
  256. ! CFLAGS=-O $(INCLUDES) $(DEFINES)
  257.   LIBS=-lX -lm
  258. ! SRCS=xdvi.c dvi_init.c dvi_draw.c $(FONTFORMATS_C) pxl_open.c tpic.c
  259.   OBJS=xdvi.o dvi_init.o dvi_draw.o $(FONTFORMATS_O) pxl_open.o tpic.o
  260.   CC=/tuna_a/gnu/bin/gcc
  261.   RM=rm -f
  262. ***************
  263. *** 38,55 ****
  264.   pk.o:    xdvi.h
  265.   pxl.o:    xdvi.h
  266.   
  267. ! xdvi.man: xdvi10.man.s
  268. !     sed -e "s;%%FONT_PATH%%;$(FONT_PATH);g" \
  269. !         -e "s;%%DEFAULT_FONT_PATH%%;$(DEFAULT_FONT_PATH);g" \
  270. !         < xdvi10.man.s \
  271. !         > xdvi.man
  272.   
  273. ! install: all
  274. !     install -c -s xdvi $(DESTDIR)$(BINDIR)
  275.   
  276.   clean:
  277. !     $(RM) *.o *.BAK *.CKP xdvi.man xdvi a.out core errs *~
  278.   
  279.   lint:
  280. !     lint $(DEFINES) xdvi.c dvi_init.c dvi_draw.c \
  281. !         $(FONTFORMATS_C) pxl_open.c tpic.c
  282. --- 38,59 ----
  283.   pk.o:    xdvi.h
  284.   pxl.o:    xdvi.h
  285.   
  286. ! pxl_open.o:
  287. !     $(CC) -c $(CFLAGS) $(FONTDEFINES) pxl_open.c
  288.   
  289. ! xdvi.man: xdvi.man.sed
  290. !     chmod u+x mksedscript
  291. !     mksedscript $(DEFAULT_FONT_PATH) $(DEFAULT_FONT_SIZES) $(DEFINES) \
  292. !         > sedscript
  293. !     sed -f sedscript < xdvi.man.sed > xdvi.man
  294.   
  295. + install: xdvi xdvi.man
  296. +     install -c -s -m 755 xdvi $(BINDIR)
  297. +     install -c -m 644 xdvi.man $(MANDIR)/man1/xdvi.1
  298.   clean:
  299. !     $(RM) *.o *.BAK *.CKP sedscript xdvi.man xdvi a.out core errs *~
  300. !     $(RM) xdvi10.man.s
  301.   
  302.   lint:
  303. !     lint $(INCLUDES) $(DEFINES) $(FONTDEFINES) $(SRCS)
  304. diff -cr old/README new/README
  305. *** old/README    Fri Nov 17 21:22:54 1989
  306. --- new/README    Sat Nov  4 20:34:30 1989
  307. ***************
  308. *** 1,33 ****
  309. ! Latest comments are at the end of the file. Add changes there.
  310. ! ===$Header: README,v 1.2 88/07/22 21:00:33 eichin Exp $===
  311. ! ================================================================
  312. ! This directory contains a version of xdvi capable of reading GF, PXL
  313. ! and PK font files. This version of xdvi is based on the source that
  314. ! "came with" X v10r3. Xdvi was modified by Paal Kvamme at the Norwegian
  315. ! Institute of Technology, based on the modifications I had made to
  316. ! dviimp (a dvi to ImPress converter). This code was again more or less
  317. ! directly translated from the web source of PKtoPX.
  318.   
  319. ! If you discover (and fix) any bugs in this code, please notify me, so
  320. ! I can make the corresponding changes myself.
  321.   
  322. ! ---------
  323. ! H}vard Eidnes    (TeXish: H\aa vard Eidnes)
  324. ! Division of Computer Science
  325. ! Norwegian Institute of Technology
  326.   
  327. ! E-Mail: h_eidnes%vax.runit.unit.uninett@nta-vax.arpa
  328. ! ================================================================
  329. ! Also has path search added by Mark Eichin, looks in TEXFONTS
  330. ! ================================================================
  331.   
  332. - Compilation notes:
  333. -     To compile for X10 (non athena, assumes NORMAL X10 system)
  334. -         make -f Makefile_10
  335. -     To compile for X11 (athena environment)
  336. -         make
  337. -             _Mark Eichin
  338. -             <eichin@athena.mit.edu>
  339.   
  340.       The X10 flag only affects xdvi.c and pxl.c (and the flags MSBITFIRST,
  341.       BMSHORT, and BMLONG, see below).
  342. --- 1,25 ----
  343. ! INSTALLATION INSTRUCTIONS
  344. ! To install, do the following:
  345. !     1.    Read the ENVIRONMENTS section of xdvi.man.sed to determine the correct
  346. !     default values for the XDVIFONTS and XDVISIZES environment variables.
  347. !     Edit the Imakefile or Makefile and change the values of the make
  348. !     variables DEFAULT_FONT_PATH and DEFAULT_FONT_SIZES to these values.
  349.   
  350. !     (Note:  for X10 compilation, use Makefile_10 instead of Makefile.)
  351.   
  352. !     You may also wish to change other compilation options; they are
  353. !     described later in this file.
  354.   
  355. !     2.  make xdvi and try it out.  If the settings in step one are incorrect,
  356. !     you can use the corresponding environment variables to quickly try out
  357. !     different values.  If the values set in step 1 were incorrect,
  358. !     rm pxl_open.o and go back to step 1.
  359. !     3.  make xdvi.man.
  360. !     4.  Install xdvi and xdvi.man.
  361.   
  362.   
  363.       The X10 flag only affects xdvi.c and pxl.c (and the flags MSBITFIRST,
  364.       BMSHORT, and BMLONG, see below).
  365. ***************
  366. *** 62,70 ****
  367.               cannot be found.  Can be set to NULL.  By default, it
  368.               is "cmr10".
  369.       NOTOOL        (X11 only; xdvi.c)  Compile using raw X calls.
  370.   
  371. ! All flags should be set in the appropriate Makefile.
  372. ! ================================================================
  373.   Additional notes:
  374.       X11 version now works on the IBM PC/RT as well as VAX.
  375.               [eichin:19880313.1330EST]
  376. --- 54,94 ----
  377.               cannot be found.  Can be set to NULL.  By default, it
  378.               is "cmr10".
  379.       NOTOOL        (X11 only; xdvi.c)  Compile using raw X calls.
  380. +     BUTTONS        (xdvi.c)  Put radio buttons on the right side of the
  381. +             window for commonly used commands.
  382. +     A4        (xdvi.c)  Use European size paper by default.
  383.   
  384. ! All flags should be set in the appropriate Makefile via the variable
  385. ! ``DEFINES''.
  386. ! ================================================================
  387. ! Notes of historical nature follow.  Most recent changes are listed at the end
  388. ! of the file.
  389. ! ================================================================
  390. ! This directory contains a version of xdvi capable of reading GF, PXL
  391. ! and PK font files. This version of xdvi is based on the source that
  392. ! "came with" X v10r3. Xdvi was modified by Paal Kvamme at the Norwegian
  393. ! Institute of Technology, based on the modifications I had made to
  394. ! dviimp (a dvi to ImPress converter). This code was again more or less
  395. ! directly translated from the web source of PKtoPX.
  396. ! If you discover (and fix) any bugs in this code, please notify me, so
  397. ! I can make the corresponding changes myself.
  398. ! ---------
  399. ! H}vard Eidnes    (TeXish: H\aa vard Eidnes)
  400. ! Division of Computer Science
  401. ! Norwegian Institute of Technology
  402. ! E-Mail: h_eidnes%vax.runit.unit.uninett@nta-vax.arpa
  403. ! ================================================================
  404. ! Also has path search added by Mark Eichin, looks in TEXFONTS
  405. ! ================================================================
  406. ! ================================================================
  407.   Additional notes:
  408.       X11 version now works on the IBM PC/RT as well as VAX.
  409.               [eichin:19880313.1330EST]
  410. ***************
  411. *** 121,126 ****
  412. --- 145,157 ----
  413.       generating table.h.
  414.   --  Patchlevel 3:  --
  415.      13.  Added -altfont command line option and SYSV compilation option.
  416. + ================================================================================
  417. + 4/1989  Modified for System V boxes. -DSYSV compiler option.
  418. + Donald Richardson, donr@crystal.mie.clarkson.edu
  419. + ================================================================================
  420.   --  Patchlevel 4:  --
  421.      14.  Removed MAXCHARS compilation option.  It's automatic now.  Made X10
  422.       scrolling smoother.  Implemented the moving magnifying glass.
  423. ***************
  424. *** 132,143 ****
  425.       a character def. were not being processed.  Thanks to
  426.       kevin@amath.washington.edu for a bug report and fix.
  427.      17.  Added 'k' keystroke.
  428.   
  429.   Paul Vojta, vojta@math.berkeley.edu
  430. - ================================================================================
  431. - 4/1989  Modified for System V boxes. -DSYSV compiler option.
  432. - Donald Richardson, donr@crystal.mie.clarkson.edu
  433. - ================================================================================
  434. --- 163,172 ----
  435.       a character def. were not being processed.  Thanks to
  436.       kevin@amath.washington.edu for a bug report and fix.
  437.      17.  Added 'k' keystroke.
  438. + --  Patchlevel 6:  --
  439. +    18.  Added buttons on the right side of the window.
  440. +    19.  Added -pagewidth and -pageheight command line options and A4
  441. +     compilation option.
  442. +    20.  Added a yet more robust font finding algorithm.
  443.   
  444.   Paul Vojta, vojta@math.berkeley.edu
  445. diff -cr old/dvi_draw.c new/dvi_draw.c
  446. *** old/dvi_draw.c    Fri Nov 17 21:22:57 1989
  447. --- new/dvi_draw.c    Thu Nov  9 12:26:42 1989
  448. ***************
  449. *** 17,25 ****
  450.    *    SYSV    compile for System V
  451.    *    X10    compile for X10
  452.    *    NOTOOL    compile without toolkit (X11 only)
  453. !  *    MSBITFIRST    store bitmaps internally in with significant bit first
  454.    *    BMSHORT    store bitmaps in shorts instead of bytes
  455.    *    BMLONG    store bitmaps in longs instead of bytes
  456.    */
  457.   
  458.   #include <stdio.h>
  459. --- 17,28 ----
  460.    *    SYSV    compile for System V
  461.    *    X10    compile for X10
  462.    *    NOTOOL    compile without toolkit (X11 only)
  463. !  *    BUTTONS    compile with buttons on the side of the window (needs toolkit)
  464. !  *    MSBITFIRST    store bitmaps internally with most significant bit first
  465.    *    BMSHORT    store bitmaps in shorts instead of bytes
  466.    *    BMLONG    store bitmaps in longs instead of bytes
  467. +  *    ALTFONT    default for -altfont option
  468. +  *    A4    use European size paper
  469.    */
  470.   
  471.   #include <stdio.h>
  472. ***************
  473. *** 152,161 ****
  474.       char *fontname;
  475.       ubyte ch;
  476.   {
  477.       /* width must be multiple of 16 bits for raster_op */
  478.       bitmap->bytes_wide = ROUNDUP(bitmap->w, BITS_PER_BMUNIT) *
  479.           BYTES_PER_BMUNIT;
  480. !     bitmap->bits = malloc((unsigned) bitmap->bytes_wide * bitmap->h);
  481.       if (bitmap->bits == NULL)
  482.           oops("Can't allocate bitmap for character %d of font %s (%d by %d)",
  483.           ch, fontname, bitmap->w, bitmap->h);
  484. --- 155,167 ----
  485.       char *fontname;
  486.       ubyte ch;
  487.   {
  488. +     register unsigned int    size;
  489.       /* width must be multiple of 16 bits for raster_op */
  490.       bitmap->bytes_wide = ROUNDUP(bitmap->w, BITS_PER_BMUNIT) *
  491.           BYTES_PER_BMUNIT;
  492. !     size = bitmap->bytes_wide * bitmap->h;
  493. !     bitmap->bits = malloc(size != 0 ? size : 1);
  494.       if (bitmap->bits == NULL)
  495.           oops("Can't allocate bitmap for character %d of font %s (%d by %d)",
  496.           ch, fontname, bitmap->w, bitmap->h);
  497. ***************
  498. *** 302,317 ****
  499.           open_pxl_file(current_font);
  500.           Fseek(current_font->file, g->addr, 0);
  501.           (*current_font->read_char)(current_font, ch);
  502.           if (debug & DBG_BITMAP) print_char(ch, g);
  503.       }
  504.   
  505.       if (shrink_factor == 1)
  506. !         put_bitmap(&g->bitmap, (PXL_H - g->x), (PXL_V - g->y));
  507.       else {
  508.           if (g->bitmap2.bits == NULL) {
  509.           shrink_glyph(g);
  510.           }
  511. !         put_bitmap(&g->bitmap2, (PXL_H - g->x2), (PXL_V - g->y2));
  512.       }
  513.   }
  514.   
  515. --- 308,324 ----
  516.           open_pxl_file(current_font);
  517.           Fseek(current_font->file, g->addr, 0);
  518.           (*current_font->read_char)(current_font, ch);
  519. +         g->dvi_adv = g->dvi_adv * current_font->factor;
  520.           if (debug & DBG_BITMAP) print_char(ch, g);
  521.       }
  522.   
  523.       if (shrink_factor == 1)
  524. !         put_bitmap(&g->bitmap, PXL_H - g->x, PXL_V - g->y);
  525.       else {
  526.           if (g->bitmap2.bits == NULL) {
  527.           shrink_glyph(g);
  528.           }
  529. !         put_bitmap(&g->bitmap2, PXL_H - g->x2, PXL_V - g->y2);
  530.       }
  531.   }
  532.   
  533. diff -cr old/dvi_init.c new/dvi_init.c
  534. *** old/dvi_init.c    Fri Nov 17 21:22:59 1989
  535. --- new/dvi_init.c    Sat Nov  4 18:13:36 1989
  536. ***************
  537. *** 17,25 ****
  538.    *    SYSV    compile for System V
  539.    *    X10    compile for X10
  540.    *    NOTOOL    compile without toolkit (X11 only)
  541. !  *    MSBITFIRST    store bitmaps internally in with significant bit first
  542.    *    BMSHORT    store bitmaps in shorts instead of bytes
  543.    *    BMLONG    store bitmaps in longs instead of bytes
  544.    */
  545.   
  546.   #include <stdio.h>
  547. --- 17,28 ----
  548.    *    SYSV    compile for System V
  549.    *    X10    compile for X10
  550.    *    NOTOOL    compile without toolkit (X11 only)
  551. !  *    BUTTONS    compile with buttons on the side of the window (needs toolkit)
  552. !  *    MSBITFIRST    store bitmaps internally with most significant bit first
  553.    *    BMSHORT    store bitmaps in shorts instead of bytes
  554.    *    BMLONG    store bitmaps in longs instead of bytes
  555. +  *    ALTFONT    default for -altfont option
  556. +  *    A4    use European size paper
  557.    */
  558.   
  559.   #include <stdio.h>
  560. ***************
  561. *** 30,36 ****
  562.   
  563.   #define    dvi_oops(str)    longjmp(dvi_env, (int) str);
  564.   #define XtOffset(type, field)    ((unsigned int)&(((type)NULL)->field))
  565. - extern char    *alt_font;
  566.   
  567.   static    struct stat fstatbuf;        /* mechanism to see if file was */
  568.   time_t    dvi_time;            /* modified since last usage */
  569. --- 33,38 ----
  570. ***************
  571. *** 73,105 ****
  572.   char    *malloc(), *strcpy();
  573.   FILE    *pxl_open();
  574.   
  575. - static    Boolean
  576. - define_new_font(fontp, fontname)
  577. -     register struct font *fontp;
  578. -     char *fontname;
  579. - {
  580. -     read_font_index_proc read_font_index;
  581. -     if (n_fonts_left == 0)
  582. -         close_a_file();
  583. -     fontp->file = pxl_open(font_path, fontname, fontp->size,
  584. -         (fontp->size + 2) / 5, &fontp->filename, &read_font_index);
  585. -     if (fontp->file == NULL) {
  586. -         Fprintf(stderr, "Font %s at %d dpi [not found]\n", fontname,
  587. -         (fontp->size + 2) / 5);
  588. -         return(False);
  589. -     }
  590. -     (*read_font_index)(fontp);
  591. -     --n_fonts_left;
  592. -     return(True);
  593. - }
  594.   /*
  595.    *      define_font reads the rest of the fntdef command and then reads in
  596.    *      the specified pixel file, adding it to the global linked-list holding
  597.    *      all of the fonts used in the job.
  598.    */
  599. ! static
  600.   define_font(cmnd)
  601.       ubyte cmnd;
  602.   {
  603. --- 75,86 ----
  604.   char    *malloc(), *strcpy();
  605.   FILE    *pxl_open();
  606.   
  607.   /*
  608.    *      define_font reads the rest of the fntdef command and then reads in
  609.    *      the specified pixel file, adding it to the global linked-list holding
  610.    *      all of the fonts used in the job.
  611.    */
  612. ! static    void
  613.   define_font(cmnd)
  614.       ubyte cmnd;
  615.   {
  616. ***************
  617. *** 108,115 ****
  618.       struct font *fontp1;
  619.       int len;
  620.       int design;
  621. -     int unmodsize;
  622. -     float realsize;
  623.       int size;
  624.   
  625.       fontp = (struct font *) malloc((unsigned) sizeof(struct font));
  626. --- 89,94 ----
  627. ***************
  628. *** 126,161 ****
  629.       if(debug & DBG_PK)
  630.         Printf("Define font \"%s\" scale=%d design=%d\n",
  631.           fontp->fontname, fontp->scale, design);
  632. ! /*
  633. !  *    In the actual implementation, scaled-size/design-size hasn't been
  634. !  *    stored with sufficient precision, hence the messing around to find
  635. !  *    its actual value.
  636. !  */
  637. !     realsize = (magnification/1000.)*((float) fontp->scale / design);
  638. !     unmodsize = (realsize * 1000) + 0.5;
  639. !     /* a real hack to correct for rounding in some cases */
  640. !     switch (unmodsize) {
  641. !         case 1095:
  642. !         realsize = 1.095445;    /* stephalf */
  643. !         break;
  644. !         case 1315:
  645. !         realsize = 1.314534;    /* stepihalf */
  646. !         break;
  647. !         case 2074:
  648. !         realsize = 2.0736;    /* stepiv */
  649. !         break;
  650. !         case 2488:
  651. !         realsize = 2.48832;    /* stepv */
  652. !         break;
  653. !         case 2986:
  654. !         realsize = 2.985984;    /* stepiv */
  655. !         break;
  656. !     }
  657. !     /*
  658. !      * the remaining magnification steps are represented
  659. !      * with sufficient accuracy already
  660. !      */
  661. !     fontp->size = size = (realsize * pixels_per_inch * 5) + 0.5;
  662.       fontp->scale = fontp->scale * fraction;
  663.       /*
  664.        * reuse font if possible
  665. --- 105,112 ----
  666.       if(debug & DBG_PK)
  667.         Printf("Define font \"%s\" scale=%d design=%d\n",
  668.           fontp->fontname, fontp->scale, design);
  669. !     fontp->size = size = ((double) fontp->scale / design * magnification
  670. !         * pixels_per_inch * 0.005) + 0.5;
  671.       fontp->scale = fontp->scale * fraction;
  672.       /*
  673.        * reuse font if possible
  674. ***************
  675. *** 163,181 ****
  676.       for (;;) {
  677.           fontp1 = *fontpp;
  678.           if (fontp1 == NULL) {
  679. !         maxchar = 255;
  680. !         if (!define_new_font(fontp, fontp->fontname)) {
  681. !             if (alt_font == NULL || !define_new_font(fontp, alt_font)) {
  682. !             font_not_found = True;
  683. !             return;
  684. !             }
  685.               Fprintf(stderr,
  686. !             "Can't find <%s>, using <%s> instead at %d dpi\n",
  687. !             fontp->fontname, alt_font, (size + 2) / 5);
  688.               free(fontp->fontname);
  689. !             fontp->fontname = malloc((unsigned) strlen(alt_font)+1);
  690. !             (void) strcpy(fontp->fontname, alt_font);
  691.           }
  692.           while (maxchar > 0 && fontp->glyph[maxchar].addr == 0)
  693.               --maxchar;
  694.           if (maxchar < 255)
  695. --- 114,150 ----
  696.       for (;;) {
  697.           fontp1 = *fontpp;
  698.           if (fontp1 == NULL) {
  699. !         read_font_index_proc read_font_index;
  700. !         char    *font_found;
  701. !         int    size_found;
  702. !         int    dpi = (size + 2) / 5;
  703. !         if (n_fonts_left == 0)
  704. !             close_a_file();
  705. !         fontp->file = pxl_open(fontp->fontname, &font_found,
  706. !             size, &size_found, &fontp->factor, &fontp->filename,
  707. !             &read_font_index);
  708. !         if (fontp->file == NULL) {
  709. !             Fprintf(stderr, "Can't find font %s.\n", fontp->fontname);
  710. !             font_not_found = True;
  711. !             return;
  712. !         }
  713. !         --n_fonts_left;
  714. !         if (font_found != NULL) {
  715.               Fprintf(stderr,
  716. !             "Can't find font %s; using %s instead at %d dpi\n",
  717. !             fontp->fontname, font_found, dpi);
  718.               free(fontp->fontname);
  719. !             fontp->fontname = font_found;
  720.           }
  721. +         else if (25 * size_found > 26 * size ||
  722. +             25 * size > 26 * size_found)
  723. +             Fprintf(stderr,
  724. +             "Can't find font %s at %d dpi; using %d dpi instead.\n",
  725. +             fontp->fontname, dpi, (size_found + 2) / 5);
  726. +         fontp->factor = fontp->factor * size / size_found;
  727. +         maxchar = 255;
  728. +         (*read_font_index)(fontp);
  729.           while (maxchar > 0 && fontp->glyph[maxchar].addr == 0)
  730.               --maxchar;
  731.           if (maxchar < 255)
  732. diff -cr old/mksedscript new/mksedscript
  733. *** old/mksedscript    Fri Nov 17 22:07:36 1989
  734. --- new/mksedscript    Sat Nov  4 16:24:00 1989
  735. ***************
  736. *** 0 ****
  737. --- 1,25 ----
  738. + #! /bin/csh
  739. + unset    x10 buttons a4
  740. + set    noglob
  741. + foreach x ($argv[3-])
  742. +     if ($x == -DX10)    set x10
  743. +     if ($x == -DBUTTONS)    set buttons
  744. +     if ($x == -DA4)        set a4
  745. + end
  746. + if ($?x10) then
  747. +     echo    /^\#ifx11/,/^\#/d
  748. +     echo    s/%%dot%%//
  749. + else
  750. +     echo    /^\#ifx10/,/^\#/d
  751. +     echo    s/%%dot%%/./
  752. + endif
  753. + if (! $?buttons)    echo /^\#ifbuttons/,/^\#/d
  754. + echo    /^\#/d
  755. + if ($?a4) then
  756. +     echo    s/%%defaultpagesize%%/8.3 x 11.7 inches (A4 size)/
  757. + else
  758. +     echo    s/%%defaultpagesize%%/8.5 x 11 inches/
  759. + endif
  760. + echo    s\;%%DEFAULT_FONT_PATH%%\;$1\;
  761. + echo    s/%%DEFAULT_FONT_SIZES%%/$2/
  762. + rm -f xdvi10.man.s
  763. diff -cr old/patchlevel.h new/patchlevel.h
  764. *** old/patchlevel.h    Fri Nov 17 21:23:02 1989
  765. --- new/patchlevel.h    Wed Nov 15 20:31:44 1989
  766. ***************
  767. *** 1 ****
  768. ! #define PATCHLEVEL 5
  769. --- 1 ----
  770. ! #define PATCHLEVEL 6
  771. diff -cr old/pk.c new/pk.c
  772. *** old/pk.c    Fri Nov 17 21:23:04 1989
  773. --- new/pk.c    Thu Nov  9 12:28:38 1989
  774. ***************
  775. *** 240,246 ****
  776.       putchar('\n');
  777.       }
  778.   
  779. -     if (g->bitmap.w == 0) return;
  780.       alloc_bitmap(&g->bitmap, fontp->fontname, ch);
  781.       cp = (BMUNIT *) g->bitmap.bits;
  782.   /*
  783. --- 240,245 ----
  784. diff -cr old/pxl_open.c new/pxl_open.c
  785. *** old/pxl_open.c    Fri Nov 17 21:23:06 1989
  786. --- new/pxl_open.c    Thu Nov  9 12:30:18 1989
  787. ***************
  788. *** 1,23 ****
  789.   /*
  790. !  *    pxl_open.c(path, font, pxlmag, pkmag, name, read_font_index)
  791.    *    Find and open gf, pk, or pxl files in the given path, having the given
  792.    *    name and magnification.  It tries gf files first, followed by pk and pxl
  793. !  *    files..  The path variable should be of the form path1:path2:...:pathn,
  794.    *    and each of the paths will be tried successively.  Strings in pathi of
  795.    *    the form %f, %p, and %d will be replaced by the font name, "gf" or "pk"
  796.    *    or "pxl", and the magnification, respectively.  If no %f appears in a
  797. !  *    path specifier, then the string "/%f.%d%p" is added on the end.  If
  798. !  *    the file is found, then a file pointer is returned, and *name is set to
  799. !  *    a string giving the file name.  If the file is not found, then NULL is
  800. !  *    returned.  This procedure also returns a pointer to the glyph-reading
  801. !  *    procedure associated with the file format.
  802. !  * 
  803.    *    Often there are so many fonts that we need to manage the number of
  804.    *    simultaneously open files.  In that case, the variable n_fonts_left
  805.    *    gives the number of open files that are left, (initially MAXINT, set
  806.    *    dynamically) and when it is necessary to close a file, these routines
  807.    *    call close_a_file() which should free up a file descriptor.
  808. !  * 
  809.    */
  810.   
  811.   #include <stdio.h>
  812. --- 1,35 ----
  813.   /*
  814. !  *    pxl_open.c(font, font_ret, mag, mag_ret, factor, name, read_font_index)
  815.    *    Find and open gf, pk, or pxl files in the given path, having the given
  816.    *    name and magnification.  It tries gf files first, followed by pk and pxl
  817. !  *    files.  The path variable should be of the form path1:path2:...:pathn,
  818.    *    and each of the paths will be tried successively.  Strings in pathi of
  819.    *    the form %f, %p, and %d will be replaced by the font name, "gf" or "pk"
  820.    *    or "pxl", and the magnification, respectively.  If no %f appears in a
  821. !  *    path specifier, then the string "/%f.%d%p" is added on the end.  This
  822. !  *    procedure is repeated for each of the possible magnifications allowed,
  823. !  *    and if it fails then the procedure will try changing the point size
  824. !  *    as well.  If all of the above fails, then alt_font will be tried.
  825. !  *
  826. !  *    If the file is found, then a file pointer is returned, and the following
  827. !  *    values are set:
  828. !  *        *font_ret  a pointer to a string containing the font name (if
  829. !  *            different from the font requested).
  830. !  *        *mag_ret  the actual magnification found.
  831. !  *        *factor    the ratio of the point sizes of the requested font
  832. !  *            and the font actually found (or 1.0 if altfont is used).
  833. !  *        *name    a pointer to a string containing the file name
  834. !  *        *read_font_index  a pointer to the read_index procedure to be
  835. !  *            used for the given font format.
  836. !  *
  837. !  *    If the file is not found, then the return value is NULL.
  838. !  *
  839.    *    Often there are so many fonts that we need to manage the number of
  840.    *    simultaneously open files.  In that case, the variable n_fonts_left
  841.    *    gives the number of open files that are left, (initially MAXINT, set
  842.    *    dynamically) and when it is necessary to close a file, these routines
  843.    *    call close_a_file() which should free up a file descriptor.
  844. !  *
  845.    */
  846.   
  847.   #include <stdio.h>
  848. ***************
  849. *** 24,42 ****
  850.   #include <string.h>
  851.   #include <errno.h>
  852.   
  853. - extern    int    errno;
  854.   #define    PATH_SEP    ':'
  855.   #define    DEFAULT_TAIL    "/%f.%d%p"
  856.   
  857. ! #ifndef    __STDC__
  858.   #define    OPEN_MODE    "r"
  859. ! #else    __STDC__
  860. ! #define    OPEN_MODE    "rb"
  861. ! #endif    __STDC__
  862.   
  863.   extern    int    n_fonts_left;
  864.   
  865.       /* the corresponding read_char procedures are handled in xdvi.h */
  866.   typedef    void (*read_font_index_proc)();
  867.       /* struct font *fontp; */
  868. --- 36,56 ----
  869.   #include <string.h>
  870.   #include <errno.h>
  871.   
  872.   #define    PATH_SEP    ':'
  873.   #define    DEFAULT_TAIL    "/%f.%d%p"
  874.   
  875. ! #ifndef    OPEN_MODE
  876.   #define    OPEN_MODE    "r"
  877. ! #endif    OPEN_MODE
  878.   
  879.   extern    int    n_fonts_left;
  880. + extern    char    *alt_font;
  881.   
  882. + static    char    *font_path;
  883. + static    char    default_font_path[]    = DEFAULT_FONT_PATH;
  884. + static    int    *sizes, *sizend;
  885. + static    char    default_size_list[]    = DEFAULT_FONT_SIZES;
  886.       /* the corresponding read_char procedures are handled in xdvi.h */
  887.   typedef    void (*read_font_index_proc)();
  888.       /* struct font *fontp; */
  889. ***************
  890. *** 46,61 ****
  891.   #ifndef    ANSI_LIB
  892.   char    *sprintf();
  893.   #endif
  894. ! char    *malloc(), *index();
  895.   
  896.   #define    Strcpy    (void) strcpy
  897.   #define    Sprintf    (void) sprintf
  898.   
  899. ! static FILE *formatted_open(path, font, pxl, mag, name)
  900. ! char *path, *font, *pxl;
  901. ! int mag;
  902. ! char **name;
  903.   {
  904.       char    *p = path,
  905.           nm[128],
  906.           *n = nm,
  907. --- 60,136 ----
  908.   #ifndef    ANSI_LIB
  909.   char    *sprintf();
  910.   #endif
  911. ! char    *malloc(), *index(), *getenv();
  912.   
  913. + double    atof();
  914.   #define    Strcpy    (void) strcpy
  915.   #define    Sprintf    (void) sprintf
  916.   
  917. ! static    void
  918. ! get_sizes(size_list, spp)
  919. !     char    *size_list;
  920. !     int    **spp;
  921.   {
  922. +     if (*size_list == PATH_SEP) ++size_list;
  923. +     for (;;) {
  924. +         *(*spp)++ = atof(size_list) * 5 + 0.5;
  925. +         size_list = index(size_list, PATH_SEP);
  926. +         if (size_list == NULL) return;
  927. +         ++size_list;
  928. +     }
  929. + }
  930. + init_pxl_open()
  931. + {
  932. +     char    *size_list;
  933. +     int    *sp, *sp1, *sp2;
  934. +     unsigned int n;
  935. +     char    *p;
  936. +     if ((font_path = getenv("XDVIFONTS")) == NULL)
  937. +         font_path = default_font_path;
  938. +     else if (*font_path == PATH_SEP)
  939. +         /*concatenate default_font_path before font_path */
  940. +         font_path = strcat(strcpy(malloc((unsigned)
  941. +         strlen(default_font_path) + strlen(font_path) + 1),
  942. +         default_font_path), font_path);
  943. +     size_list = getenv("XDVISIZES");
  944. +     n = 1;    /* count number of sizes */
  945. +     if (size_list == NULL || *size_list == PATH_SEP)
  946. +         for (p = default_size_list; (p = index(p, PATH_SEP)) != NULL; ++p)
  947. +         ++n;
  948. +     if (size_list != NULL)
  949. +         for (p = size_list; (p = index(p, PATH_SEP)) != NULL; ++p) ++n;
  950. +     sizes = (int *) malloc(n * sizeof(int));
  951. +     sizend = sizes + n;
  952. +     sp = sizes;    /* get the actual sizes */
  953. +     if (size_list == NULL || *size_list == PATH_SEP)
  954. +         get_sizes(default_size_list, &sp);
  955. +     if (size_list != NULL) get_sizes(size_list, &sp);
  956. +     /* bubble sort the sizes */
  957. +     sp1 = sizend - 1;    /* extent of this pass */
  958. +     do {
  959. +         sp2 = NULL;
  960. +         for (sp = sizes; sp < sp1; ++sp)
  961. +         if (*sp > sp[1]) {
  962. +             int i = *sp;
  963. +             *sp = sp[1];
  964. +             sp[1] = i;
  965. +             sp2 = sp;
  966. +         }
  967. +     }
  968. +     while ((sp1 = sp2) != NULL);
  969. + }
  970. + static    FILE *
  971. + formatted_open(path, font, pxl, mag, name)
  972. +     char    *path, *font, *pxl;
  973. +     int    mag;
  974. +     char    **name;
  975. + {
  976.       char    *p = path,
  977.           nm[128],
  978.           *n = nm,
  979. ***************
  980. *** 102,137 ****
  981.           *name = malloc((unsigned) (n - nm + 1));
  982.           Strcpy(*name, nm);
  983.       }
  984. !     return(f);
  985.   }
  986.   
  987. ! FILE *pxl_open(path, font, pxlmag, pkmag, name, read_font_index)
  988. ! char *path, *font;
  989. ! int pxlmag, pkmag;
  990. ! char **name;
  991. ! read_font_index_proc *read_font_index;
  992.   {
  993. !     char    *p = path;
  994.       FILE    *f;
  995.   
  996.       for (;;) {
  997. !         if (read_GF_index &&
  998. !         (f=formatted_open(p, font, "gf", pkmag, name)) != NULL) {
  999. !             *read_font_index = read_GF_index;
  1000. !             return(f);
  1001.           }
  1002. !         if (read_PK_index &&
  1003. !         (f=formatted_open(p, font, "pk", pkmag, name)) != NULL) {
  1004. !             *read_font_index = read_PK_index;
  1005. !             return(f);
  1006.           }
  1007. -         if (read_PXL_index &&
  1008. -         (f=formatted_open(p, font, "pxl", pxlmag, name)) != NULL) {
  1009. -             *read_font_index = read_PXL_index;
  1010. -             return(f);
  1011. -         }
  1012. -         p = index(p, PATH_SEP);
  1013. -         if (p == NULL) return(NULL);
  1014. -         ++p;
  1015.       }
  1016.   }
  1017. --- 177,284 ----
  1018.           *name = malloc((unsigned) (n - nm + 1));
  1019.           Strcpy(*name, nm);
  1020.       }
  1021. !     return f;
  1022.   }
  1023.   
  1024. ! static    FILE *
  1025. ! pre_pxl_open(font, mag, mag_ret, name, read_font_index)
  1026. !     char    *font;
  1027. !     int    mag, *mag_ret;
  1028. !     char    **name;
  1029. !     read_font_index_proc *read_font_index;
  1030.   {
  1031. !     char    *p;
  1032.       FILE    *f;
  1033. +     int    *p1, *p2, pxlmag, pkmag;
  1034.   
  1035. +     /*
  1036. +      * Loop over sizes.  Try closest sizes first.
  1037. +      */
  1038. +     for (p2 = sizes; p2 < sizend; ++p2) if (*p2 >= mag) break;
  1039. +     p1 = p2;
  1040.       for (;;) {
  1041. !         if (p1 <= sizes)
  1042. !         if (p2 >= sizend) return NULL;
  1043. !         else pxlmag = *p2++;
  1044. !         else if (p2 >= sizend || mag * mag <= p1[-1] * *p2) pxlmag = *--p1;
  1045. !         else pxlmag = *p2++;
  1046. !         *mag_ret = pxlmag;
  1047. !         pkmag = (pxlmag + 2) / 5;
  1048. !         /*
  1049. !          * loop over paths
  1050. !          */
  1051. !         for (p = font_path;;) {
  1052. !         if (read_GF_index &&
  1053. !             (f = formatted_open(p, font, "gf", pkmag, name)) != NULL) {
  1054. !             *read_font_index = read_GF_index;
  1055. !             return f;
  1056. !         }
  1057. !         if (read_PK_index &&
  1058. !             (f = formatted_open(p, font, "pk", pkmag, name)) != NULL) {
  1059. !             *read_font_index = read_PK_index;
  1060. !             return f;
  1061. !         }
  1062. !         if (read_PXL_index &&
  1063. !             (f = formatted_open(p, font, "pxl", pxlmag, name)) != NULL)
  1064. !         {
  1065. !             *read_font_index = read_PXL_index;
  1066. !             return f;
  1067. !         }
  1068. !         p = index(p, PATH_SEP);
  1069. !         if (p == NULL) break;
  1070. !         ++p;
  1071.           }
  1072. !     }
  1073. ! }
  1074. ! FILE *
  1075. ! pxl_open(font, font_ret, mag, mag_ret, factor, name, read_font_index)
  1076. !     char    *font, **font_ret;
  1077. !     int    mag, *mag_ret;
  1078. !     float    *factor;
  1079. !     char    **name;
  1080. !     read_font_index_proc *read_font_index;
  1081. ! {
  1082. !     FILE    *f;
  1083. !     int    actual_pt, low_pt, high_pt, trial_pt;
  1084. !     char    fn[50], *fnend;
  1085. !     *factor = 1.0;
  1086. !     f = pre_pxl_open(font, mag, mag_ret, name, read_font_index);
  1087. !     if (f != NULL) {
  1088. !         *font_ret = NULL;
  1089. !         return f;
  1090. !     }
  1091. !     Strcpy(fn, font);
  1092. !     fnend = fn + strlen(fn);
  1093. !     while (fnend > fn && fnend[-1] >= '0' && fnend[-1] <= '9') --fnend;
  1094. !     actual_pt = low_pt = high_pt = atoi(fnend);
  1095. !     if (actual_pt) {
  1096. !         low_pt = actual_pt - 1;
  1097. !         high_pt = actual_pt + 1;
  1098. !         for (;;) {
  1099. !         if (2 * low_pt >= actual_pt &&
  1100. !             (low_pt * high_pt > actual_pt * actual_pt ||
  1101. !             high_pt > actual_pt + 5))
  1102. !             trial_pt = low_pt--;
  1103. !         else if (high_pt > actual_pt + 5) break;
  1104. !         else trial_pt = high_pt++;
  1105. !         Sprintf(fnend, "%d", trial_pt);
  1106. !         f = pre_pxl_open(fn, mag * actual_pt / trial_pt, mag_ret, name,
  1107. !             read_font_index);
  1108. !         if (f != NULL) {
  1109. !             *font_ret = strcpy(malloc((unsigned) strlen(fn) + 1), fn);
  1110. !             *factor = (float) actual_pt / trial_pt;
  1111. !             return f;
  1112. !         }
  1113.           }
  1114.       }
  1115. +     if (alt_font != NULL) {
  1116. +         *font_ret = alt_font;
  1117. +         f = pre_pxl_open(alt_font, mag, mag_ret, name, read_font_index);
  1118. +         if (f != NULL)
  1119. +         *font_ret = strcpy(malloc((unsigned) strlen(alt_font) + 1),
  1120. +             alt_font);
  1121. +     }
  1122. +     return f;
  1123.   }
  1124. diff -cr old/tpic.c new/tpic.c
  1125. *** old/tpic.c    Fri Nov 17 21:23:08 1989
  1126. --- new/tpic.c    Thu Nov  2 17:13:44 1989
  1127. ***************
  1128. *** 143,148 ****
  1129. --- 143,149 ----
  1130.       dy = y1 - y0;
  1131.       if (dotted) {
  1132.       numdots = sqrt(dx*dx + dy*dy) / milliperdash + 0.5;
  1133. +     if (numdots == 0) numdots = 1;
  1134.       for (i=0; i <= numdots; i++) {
  1135.           a = (float) i / (float) numdots;
  1136.           cx0 = x0 + a*dx + 0.5;
  1137.