[comp.sources.amiga] v02i015: PostScript interpreter source code

lee@uhccux.UUCP (Greg Lee) (08/28/87)

This is assembler source code for a screen-only PostScript language
interpreter.  Suggestions to:
	Greg Lee, U. of Hawaii Linguistics Dept.
	ARPA:           uhccux!lee@nosc.ARPA
I will post a binary to comp.binaries.amiga .


# This is a shell archive.  Remove anything before this line
# then unpack it by saving it in a file and typing "sh file"
# (Files unpacked will be owned by you and have default permissions).
# This archive contains the following files:
#	./ps.doc
#	./ps.link
#	./psedit
#	./rmath.a
#	./rotate-box
#	./show-fonts
#	./simplex.chr
#	./tletters
#
if `test ! -s ./ps.doc`
then
echo "writing ./ps.doc"
sed 's/^X//' > ./ps.doc << '\Rogue\Monster\'
X
X*
X*	This program is in the public domain.  PostScript is a trademark
X*   of Adobe Systems.
X*		Greg Lee, July, 1987.
X*   U.S. mail: 562 Moore Hall, Dept. of Linguistics
X*	       University of Hawaii, Honolulu, HI 96822
X*	 ARPA: uhccux!lee@nosc.ARPA
X*
XPS document
XGreg Lee, April, 1986
X
XPs emulates PostScript () Adobe Systems), in a small way.
X
XInteractive input and output takes place in a small window.
XThe page being composed is shown behind the window in an interlaced
Xscreen with 16 colors.  When input is
Xredirected to come from a file with "ps < programfile", the ps program
Xin this file is executed before interaction begins.
X
XThere is no prompt shown when ps is ready to receive console input.
X
XDefault screen coordinates are x = 0 to 639 from the left to the
Xright of the screen, and y = 0 to 511 from the bottom to the top
Xof the screen.  Considering the units to be points,
Xthat makes the display a nominal 8 8/9" across and 7 1/9" up and down.
X
XOperators do more or less what they do in PostScript, except as
Xnoted below.  See PostScript Language: Reference Manual, Adobe
XSystems Incorporated, Addison-Wesley, 1985.
X
XPs has one built-in font named 'simplex', which is stroked.  (Data
Xcame from Alan Hershey's data base.)
X
XTypes implemented:
X
X   integer, real, boolean, string, name, operator
X   array, mark, dictionary, save, fontID
X
XOperators:
X
X      *** stack manipulation ***
X   pop, exch, dup, copy
X   index, roll, clear, count
X   mark
X
X            *** math ***
X   add, div, idiv, mod
X   mul, sub, abs, neg
X   ceiling, floor, round       [round gives floor of -ddddd.5]
X   truncate, sqrt
X   pow, tan, tanh, cosh, sinh  (non-standard)
X   atan, cos, sin
X   exp, ln, log
X
X            *** array ***
X   array, [, ]
X   length, get, put
X
X         *** dictionary ***
X   dict
X   length, maxlength
X   begin, end
X   def                  defined operators are simple objects, not arrays;
X                        "key" must be a name
X
X           *** string ***
X   string               the '<..>' syntax is not implemented
X   length, get, put
X
X      *** relational, Boolean ***
X   eq, ne, ge
X   gt, le, lt           comparisons for numbers only, not strings
X   true, false
X
X         *** control ***
X   exec                 leaves anything but an operator on the stack
X   if, ifelse
X   for                  integers only
X   repeat, loop
X   exit
X   stop, stopped        untested
X   countexectack        always gives 0, since there is no exec stack
X   execstack            does nothing
X   quit                 exit to AmigaDos
X   start                does nothing
X
X  *** type, attribute, conversion ***
X   cvi, cvr             no conversion from strings
X   cvs                  no range-check is done
X
X           *** file ***
X   file, read, write    implemented only for %stdout and %stdin (which
X                        are always the console)
X   run                  can't nest run files or have 2 'run' commands
X                        on same line; use in defined procedures will not
X                        work properly, since 'run' merely redirects input
X   print, =
X
X        *** virtual memory ***
X   save, restore        restore merely destroys objects created since
X                        the last save and reuses the memory space they
X                        occupied (in addition to doing a grestore)
X
X        *** graphics state ***
X   gsave, grestore      colors are not saved or restored
X   setlinewidth         you get butt linecaps and bevel joins; the joins
X                        are not done properly for concave figures; when
X                        there is non-uniform scaling of the axes, rotation
X                        of the axes is not taken account of
X   currentlinewidth
X   setflat, currentflat
X   setgray              there are only 5 levels of grey available, set by
X                        argument: n = 0, 0 < n < .25, .25 <= n < .5, .5 <= n
X                        < .75, .75 <= n <= 1
X   currentgray
X   setrgbcolor          affects only current foreground pen color;
X                        takes 3 arguments in range 0-15
X   currentrgbcolor      components of current foreground pen color
X
X       *** coordinate system ***
X   translate
X   scale                for Amiga fonts, does not affect sizes of letters;
X                        moves currentpoint (bug)
X   rotate               for Amiga fonts, does not affect orientation
X   concat, concatmatrix
X   transform, dtransform
X
X       *** path construction ***
X   newpath, currentpoint
X   moveto, rmoveto
X   lineto, rlineto
X   curveto, rcurveto
X   closepath
X   charpath             only for simplex font
X   strokepath           affects entire path; lines will always be
X                        one pixel wide
X
X          *** painting ***
X   erasepage
X   fill, stroke
X
X      *** character and font ***
X   findfont             fonts are simple objects, not dictionaries;
X                        'key' can be a string or a name
X   scalefont            for Amiga fonts, must be an available size --
X                        largest is chosen if not scaled -- and also the
X                        font returned is not a new font, just a different
X                        size of the same font (for simplex the font is
X                        new)
X   makefont             only for simplex font
X   setfont
X   currentfont
X   show
X   stringwidth          for Amiga fonts, does not take account of scaling
X                        or rotation; the y coordinate returned is always 0
X
X
X
XNon-standard operators:
X
X   i {0-7}         pencolor            set foreground color
X   i {0-7}         penbcolor           set background color
X   i {0-4}         penmode             jam1, jam2, complement,, inverse
X   i               penpattern
X                   pixel               set pixel at currentpoint
X   i1 i2 i3 i4     box                 display box with top left corner
X                                       at (i1,i2) and lower right at (i3,i4)
X   any             hex       name      name has value in hex
X   i1 i2           flood               fill area surrounding (i1,i2) with
X                                       color, to boundaries of same color;
X                                       bombs system if area not enclosed
X   num             greyline            argument is in range 0 to 1; 0 causes
X                                       Amiga line drawing routine to be used
X                                       -- other values set the intensity of
X                                       lines drawn by an anti-aliasing
X                                       routine, which works best when
X                                       rgb colors 0 to 3 are progressively
X                                       darker or lighter
X
XAssembly
X
X   ps.a           main procedure
X   dict.a         systemdict
X   files.a        file io, screen and window initialization
X   console.a      console io for interactive window
X   ffpa.a         conversion between strings and reals
X   lmath.a        32 bit division and multiplication
X   control.a      'if', 'repeat', etc.
X   rmath.a        'add', 'mul', etc.; resident font routines
X   simplex.chr    simplex font data
X   graphics.a     graphics operators
X
X   ps.h           header for most modules
X   ps.link        'with' file for linking
X
\Rogue\Monster\
else
  echo "will not over write ./ps.doc"
fi
if [ `wc -c ./ps.doc | awk '{printf $1}'` -ne 7261 ]
then
echo `wc -c ./ps.doc | awk '{print "Got " $1 ", Expected " 7261}'`
fi
if `test ! -s ./ps.link`
then
echo "writing ./ps.link"
sed 's/^X//' > ./ps.link << '\Rogue\Monster\'
X
XFROM  sys:p/ps.o       *
X      sys:p/dict.o     *
X      sys:p/files.o    *
X      sys:p/console.o  *
X      sys:p/control.o  *
X      sys:p/ffpa.o     *
X      sys:p/lmath.o    *
X      sys:p/rmath.o    *
X      sys:p/simplex.o  *
X      sys:p/graphics.o
XTO    ps
X
\Rogue\Monster\
else
  echo "will not over write ./ps.link"
fi
if [ `wc -c ./ps.link | awk '{printf $1}'` -ne 259 ]
then
echo `wc -c ./ps.link | awk '{print "Got " $1 ", Expected " 259}'`
fi
if `test ! -s ./psedit`
then
echo "writing ./psedit"
sed 's/^X//' > ./psedit << '\Rogue\Monster\'
X
Xsave
X
X/infile  (%stdin)  (r) file def
X/conin   { infile read pop } def
X
X/char 1 string def
X/buf  80 string def
X
X/leftmargin 50 def
X/lineheight 20 def
X/cursorheight lineheight 5 sub def
X
X/hpos 50 def
X/vpos 300 def
X
X/cursoron {
X   currentpoint
X   3 pencolor 2 penmode
X   currentpoint cursorheight add
X   2 copy
X   exch 10 add exch lineheight sub
X   box
X   moveto
X   1 pencolor 1 penmode
X} def
X
X/newline { currentpoint exch pop leftmargin exch
X           lineheight sub moveto } def
X
X/edit {
X{
Xnewpath
Xcursoron
Xchar 0 conin put
Xcursoron
Xchar 0 get  27 eq {exit} if
Xchar 0 get  13 eq {newline} if
Xchar 0 get  32 ge {char show} if
X}
Xloop
X} def
X
X  /simplex findfont 15 scalefont setfont
X  hpos vpos moveto
X  edit
X
Xrestore
X
\Rogue\Monster\
else
  echo "will not over write ./psedit"
fi
if [ `wc -c ./psedit | awk '{printf $1}'` -ne 718 ]
then
echo `wc -c ./psedit | awk '{print "Got " $1 ", Expected " 718}'`
fi
if `test ! -s ./rmath.a`
then
echo "writing ./rmath.a"
sed 's/^X//' > ./rmath.a << '\Rogue\Monster\'
X
X* link with lmath.o
X   xref  lmulu
X   xref  ldivu
X   xref  ldivs
X   xref  lmoddivu
X
X   xref  ipop
X   xref  popnum
X   xref  r.ipush
X   xref  mathffpbase
X   xref  mathtransbase
X   xref  _fontalloc
X
X   xref  msg         for 'print' macro
X   xref  reinterp
X   xref  type_mismatch
X
X   xref  xmoveto,xlineto,xclosepath
X   xref  ymoveto,ylineto,_closepath
X   xref  ggsave,ggrestore
X
X   xref  simplex
X   xref  strokepathflag
X   xref  currfont
X
X   section  one
X
X   include  "ps.h"
X
X
Xmath  macro
X      move.l   A6,-(SP)
X      move.l   mathffpbase,A6
X      jsr      _LVO\1(A6)
X      move.l   (SP)+,A6
X      endm
X
Xieee  macro
X      move.l   A6,-(SP)
X      move.l   mathtransbase,A6
X      jsr      _LVO\1(A6)
X      move.l   (SP)+,A6
X      endm
X
X
X
X   lref     SPFix,1
X   lref     SPFlt,2
X   lref     SPCmp,3
X   lref     SPTst,4
X   lref     SPAbs,5
X   lref     SPNeg,6
X   lref     SPAdd,7
X   lref     SPSub,8
X   lref     SPMul,9
X   lref     SPDiv,10
X
X   lref     fieee,14
X   lref     tieee,13
X   lref     sqrt,12
X   lref     ln,10
X   lref     exp,9
X   lref     pow,11
X   lref     tanh,8
X   lref     cosh,7
X   lref     sinh,6
X   lref     sincos,5
X   lref     tan,4
X   lref     cos,3
X   lref     sin,2
X   lref     atan,1
X
X   ifne     HiRes
XMaxY        equ   399
XVFactor     equ   $C8000040
X   endc
X   ifeq     HiRes
XMaxY        equ   199
XVFactor     equ   $C800003F
X   endc
X
X
XGsaveSize   equ   11
X
X
Xpopri
X   bsr      ipop
X   move.l   D0,D1
X   cmp.w    #Real,D2
X   bne      1$
X   bsr      ipop
X   cmp.w    #Real,D2
X   beq      7$
X   cmp.w    #Integer,D2
X   bne      type_mismatch
X   move.l   D1,D3
X   math     SPFlt
X   move.l   D3,D1
X   move.w   #Real,D2
X   bra      7$
X
X1$ cmp.w    #Integer,D2
X   bne      type_mismatch
X   bsr      ipop
X   cmp.w    #Integer,D2
X   beq      8$
X   cmp.w    #Real,D2
X   bne      type_mismatch
X   move.l   D0,D3
X   move.l   D1,D0
X   math     SPFlt
X   move.l   D0,D1
X   move.l   D3,D0
X
X7$ moveq    #-1,D3      ret neq with 2 reals
X8$ rts                  ret eq with 2 integers
X
Xpopr
X   bsr      ipop
X   cmp.w    #Real,D2
X   beq      1$
X   cmp.w    #Integer,D2
X   bne      type_mismatch
X   move.l   D1,-(SP)
X   math     SPFlt
X   move.l   (SP)+,D1
X   move.w   #Real,D2
X1$ rts
X
X  DEF    eq
X   bsr      compare
X   beq      is_true
X   rts
X
X  DEF    ne
X   bsr      compare
X   bne      is_true
X   rts
X
X  DEF    ge
X   bsr      compare
X   bge      is_true
X   rts
X
X  DEF    gt
X   bsr      compare
X   bgt      is_true
X   rts
X
X  DEF    le
X   bsr      compare
X   ble      is_true
X   rts
X
X  DEF    lt
X   bsr      compare
X   blt      is_true
X   rts
X
X
Xcompare
X   move.l   (SP)+,A0
X   pea      is_false
X   move.l   A0,-(SP)
X   bsr      popri
X   beq      1$
X   math     SPCmp
X   rts
X1$ cmp.l    D1,D0
X   rts
X
Xis_false
X   moveq    #0,D0
X  RETURN    Boolean
X
Xis_true
X   addq.l   #4,SP
X   moveq    #-1,D0
X  RETURN    Boolean
X
X
X
X  DEF    add
X   bsr      popri
X   bne      1$
X   add.l    D1,D0
X   bra      r.ipush
X1$ math     SPAdd
X   bra      r.ipush
X
X  DEF    sub
X   bsr      popri
X   bne      1$
X   sub.l    D1,D0
X   bra      r.ipush
X1$ math     SPSub
X   bra      r.ipush
X
X  DEF    mul
X   bsr      popri
X   bne      1$
X   jsr      lmulu
X   bra      r.ipush
X1$ math     SPMul
X   bra      r.ipush
X
X  DEF    div
X   bsr      popr
X   move.l   D0,D1
X   bsr      popr
X   tst.b    D1
X   beq      diverr
X   math     SPDiv
X   bra      r.ipush
X
X  DEF    idiv
X   bsr      popnum
X   move.l   D0,D1
X   bsr      popnum
X   tst.l    D1
X   beq      diverr
X   jsr      ldivs
X   bra      r.ipush
X
Xdiverr
X   ERR      divzero
X
X  DEF    mod
X   bsr      popnum
X   move.l   D0,D1
X   bsr      popnum
X   move.l   D0,D3
X   tst.l    D0
X   bpl      1$
X   neg.l    D0
X1$ tst.l    D1
X   bpl      2$
X   neg.l    D1
X2$ move.l   D1,D2
X   move.l   D0,D1
X   jsr      lmoddivu
X   tst.l    D3
X   bpl      3$
X   neg.l    D0
X3$ bra      retinteger
X
X  DEF    abs
X   bsr      ipop
X   cmp.w    #Integer,D2
X   bne      2$
X   tst.l    D0
X   bpl      1$
X   neg.l    D0
X1$ bra      r.ipush
X2$ cmp.w    #Real,D2
X   bne      type_mismatch
X   math     SPAbs
X   bra      retreal
X
X  DEF    neg
X   bsr      ipop
X   cmp.w    #Integer,D2
X   bne      2$
X   bra      r.ipush
X2$ cmp.w    #Real,D2
X   bne      type_mismatch
X   math     SPNeg
X   bra      retreal
X
X  DEF    floor
X   moveq    #-1,D4
X   bra      ..clng
X  DEF    ceiling
X   moveq    #0,D4
X..clng
X   bsr      ipop
X   cmp.w    #Integer,D2
X   beq      r.ipush
X   cmp.w    #Real,D2
X   bne      type_mismatch
X   move.l   D0,D3
X   math     SPFix
X   move.l   D0,D2
X   math     SPFlt
X   move.l   D3,D1
X   math     SPCmp
X   beq      3$
X
X   tst.l    D4
X   bne      1$
X   tst.l    D2
X   bmi      3$
X   addq.l   #1,D2
X   bra      3$
X1$ tst.l    D2
X   bpl      3$
X   subq.l   #1,D2
X
X3$ move.l   D2,D0
X   bra      retinteger
X
X  DEF    round
X   bsr      ipop
X   cmp.w    #Integer,D2
X   beq      r.ipush
X   cmp.w    #Real,D2
X   bne      type_mismatch
X   move.l   D0,D3
X   and.b    #$7F,D0
X   move.l   #PointFive,D1
X   math     SPAdd
X   math     SPFix
X   and.b    #$80,D3
X   beq      retinteger
X   neg.l    D0
X   bra      retinteger
X
X  DEF    truncate
X   bsr      ipop
X   cmp.w    #Integer,D2
X   beq      r.ipush
X   cmp.w    #Real,D2
X   bne      type_mismatch
X   math     SPFix
X   bra      retinteger
X
Xretinteger
X   RETURN   Integer
X
Xretreal
X   RETURN   Real
X
X
X
Xief   macro
X   xdef  _\1
X_\1
X   bsr   popr
X   ieee  \1
X   bra   retreal
X   endm
X
X
Xiefa  macro
X   xdef  _\1
X_\1
X   bsr   popr
X   move.l   #$8EFA353B,D1
X   math     SPMul
X   ieee  \1
X   bra   retreal
X   endm
X
X   ief     fieee
X   ief     tieee
X   ief     sqrt
X   ief     ln
X   ief     exp
X   ief     pow
X   iefa     tanh
X   iefa     cosh
X   iefa     sinh
X*   ief     sincos
X   iefa     tan
X   iefa     cos
X   iefa     sin
X
X
X  DEF    log
X   bsr      popr
X   ieee     ln
X   move.l   #$935D8D42,D1
X   math     SPDiv
X   bra      retreal
X
X
X  DEF    atan
X   bsr      popr        x
X   move.l   D0,D1
X   bsr      popr        y
X   moveq    #0,D3
X   tst.b    D1
X   beq      ..vrt
X   bpl      1$
X   move.w   #180,D3     +y/-x
X   tst.b    D0
X   bpl      2$
X   move.w   #270,D3     -y/-x
X   bra      2$
X1$ tst.b    D0
X   bpl      2$
X   move.w   #360,D3     -y/+x
X2$
X   math     SPDiv
X   and.b    #$7F,D0
X   ieee     atan
X   move.l   #$8EFA353B,D1
X   math     SPDiv
X   tst.l    D3
X   beq      retreal
X   or.b     #$80,D0     subtr. from 180,270, or 360
X   exg      D0,D3
X   math     SPFlt
X   move.l   D3,D1
X   math     SPAdd
X   bra      retreal
X..vrt
X   move.l   D0,D1
X   move.l   #90,D0
X   tst.b    D1
X   beq      diverr
X   bpl      retinteger
X   move.w   #270,D0
X   bra      retinteger
X
X
X  DEF    gsave
X   lea      gsavecnt,A0
X   cmp.w    #PstackSize,(A0)
X   beq      2$
X   move.w   (A0),D0
X   addq.w   #1,(A0)
X   mulu     #GsaveSize*4,D0
X   moveq    #GsaveSize-1,D1
X   lea      CTM,A0
X   lea      sCTM,A1
X   add.l    D0,A1
X1$ move.l   (A0)+,(A1)+
X   dbra     D1,1$
X   bra      ggsave
X2$ ERR      gsov
X
X
X  DEF    grestore
X   lea      gsavecnt,A0
X   tst.w    (A0)
X   beq      2$
X   subq.w   #1,(A0)
X   move.w   (A0),D0
X   mulu     #GsaveSize*4,D0
X
X   moveq    #GsaveSize-1,D1
X   lea      CTM,A0
X   lea      sCTM,A1
X   add.l    D0,A1
X1$ move.l   (A1)+,(A0)+
X   dbra     D1,1$
X   bra      ggrestore
X2$ ERR      gsuv
X
X
XmatA     equ   0
XmatB     equ   4
XmatC     equ   8
XmatD     equ   12
XmatTx    equ   16
XmatTy    equ   20
X
X* convert array of 6 numbers at D0 to matrix
Xarrayto2matrix
X   lea      temp2matrix,A1
X   bra      ..arrtm
Xarraytomatrix
X   lea      tempmatrix,A1
X..arrtm
X   move.l   D0,A0
X   cmp.w    #6,(A0)+
X   bne      materr
X   moveq    #5,D3
X1$
X   move.w   (A0)+,D2
X   move.l   (A0)+,D0
X   cmp.w    #Real,D2
X   beq      2$
X   cmp.w    #Integer,D2
X   bne      materr
X   math     SPFlt
X2$
X   move.l   D0,(A1)+
X   dbra     D3,1$
X   rts
X
Xmaterr
X   ERR      materror
X
X
X  DEF    translate
X   lea      v_translate,A0
Xdomatrix
X   move.l   A4,-(SP)
X   move.l   A0,A4
X   bsr      ipop
X   cmp.w    #Array,D2
X   bne      1$
X   move.l   D0,-(SP)
X   bsr      arraytomatrix
X   lea      tempmatrix,A2
X   move.l   A2,-(SP)
X   jsr      (A4)
X   move.l   (SP)+,A2
X   move.l   (SP),D0
X   bsr      matrixtoarray
X   move.l   (SP)+,D0
X   move.l   (SP)+,A4
X   RETURN   Array
X1$
X   bsr      r.ipush
X   lea      CTM,A2
X   jsr      (A4)
X   move.l   (SP)+,A4
X   rts
X
Xmatrixtoarray
X   move.l   D0,A0
X   lea      2(A0),A0    past length
X   moveq    #5,D3
X   move.w   #Real,D2
X1$ move.w   D2,(A0)+
X   move.l   (A2)+,(A0)+
X   dbra     D3,1$
X   rts
X
Xv_translate
X   bsr      popr
X   move.l   D0,D3
X   bsr      popr
X*   lea      CTM,A2
Xxtranslate
X   move.l   matTx(A2),D1
X   math     SPAdd
X   move.l   D0,matTx(A2)
X   move.l   D3,D0
X   move.l   matTy(A2),D1
X   math     SPAdd
X   move.l   D0,matTy(A2)
X   rts
X
X  DEF    scale
X   lea      v_scale,A0
X   bra      domatrix
Xv_scale
X   bsr      popr
X   tst.b    D0
X   beq      diverr
X   move.l   D0,D3
X   bsr      popr
X   tst.b    D0
X   beq      diverr
X   move.l   D0,D2
X*   lea      CTM,A2
X   bsr      xscale
X
X   exg      D2,D3
X   move.l   currx,D0
X   move.l   D2,D1
X   math     SPDiv
X   move.l   D0,D2
X
X   move.l   curry,D0
X   move.l   D3,D1
X   math     SPDiv
X   move.l   D0,D3
X
X   bra      xy
X
X
Xxscale
X   move.l   (A2),D1
X   bsr      rmul
X   move.l   D0,(A2)     sx * a
X
X   move.l   matB(A2),D1
X   bsr      rmul
X   move.l   D0,matB(A2)    sx * b
X
X   exg      D3,D2
X   move.l   matC(A2),D1
X   bsr      rmul
X   move.l   D0,matC(A2)    sy * c
X
X   move.l   matD(A2),D1
X   bsr      rmul
X   move.l   D0,matD(A2)   sy * d
X
X   rts
X
X  DEF    rotate
X   lea      v_rotate,A0
X   bra      domatrix
Xv_rotate
X   bsr      popr
X   move.l   #$8EFA353B,D1
X   math     SPMul
X   move.l   D0,D3
X   ieee     sin
X   exg      D0,D3
X   ieee     cos
X   move.l   D0,D4
X* D3 = sin, D4 = cos
X
X*   lea      CTM,A2
X   bsr      rot1
X
X   lea      4(A2),A2
Xrot1
X   move.l   (A2),D0
X   move.l   D0,-(SP)
X   move.l   D4,D1
X   math     SPMul
X   move.l   D0,D2    a * cos (b * cos)
X
X   move.l   matC(A2),D0
X   move.l   D0,-(SP)    c (d)
X   move.l   D3,D1
X   math     SPMul    c * sin (d * sin)
X   move.l   D2,D1
X   math     SPAdd
X   move.l   D0,(A2)  a * cos + c * sin  (b * cos + d * sin)
X
X   move.l   (SP)+,D0    c (d)
X   move.l   D4,D1
X   math     SPMul
X   move.l   D0,D2       c * cos
X   move.l   (SP)+,D0    a (b)
X   move.l   D3,D1
X   math     SPMul       a * sin
X   move.l   D2,D1
X   exg      D0,D1
X   math     SPSub       c * cos - a * sin (d * cos - b * sin)
X   move.l   D0,matC(A2)
X   rts
X
Xrmul
X   beq      2$
X   move.l   D2,D0
X   beq      1$
X   math     SPMul
X1$ rts
X2$ moveq    #0,D0
X   rts
X
X  DEF    concatmatrix
X  ARG    Array
X   move.l   D0,-(SP)    save result matrix to return
X   move.l   D0,A0
X   cmp.w    #6,(A0)     right size?
X   bne      materr
X  ARG    Array
X   bsr      arrayto2matrix    matrix2
X  ARG    Array
X   bsr      arraytomatrix     matrix1
X
X   lea      tempmatrix,A0
X   lea      temp2matrix,A2
X   move.l   A2,-(SP)
X   bsr      y_concat
X   move.l   (SP)+,A2
X   move.l   (SP),D0
X   bsr      matrixtoarray
X   move.l   (SP)+,D0
X   RETURN   Array
X
X  DEF    concat
X  ARG    Array
X   bsr   arraytomatrix
X   lea   tempmatrix,A0
X   lea   CTM,A2
X
X* matrix at A2 = matrix at A0 X matrix at A2
Xy_concat
X   movem.l  D4/A3,-(SP)
X   move.l   A0,A3
X   bsr      halfmul
X   lea      4(A2),A2
X   bsr      halfmul
X   movem.l  (SP)+,D4/A3
X   rts
X
X* uses D2 = a2 D3 = c2 D4 = multiplicand
Xhalfmul
X   move.l   (A2),D2
X   move.l   matC(A2),D3
X
X   move.l   (A3),D0
X   move.l   D2,D1
X   math     SPMul
X   move.l   D0,D4
X
X   move.l   matB(A3),D0
X   move.l   D3,D1
X   math     SPMul
X   move.l   D4,D1
X   math     SPAdd
X   move.l   D0,(A2)
X
X   move.l   matC(A3),D0
X   move.l   D2,D1
X   math     SPMul
X   move.l   D0,D4
X
X   move.l   matD(A3),D0
X   move.l   D3,D1
X   math     SPMul
X   move.l   D4,D1
X   math     SPAdd
X   move.l   D0,matC(A2)
X
X   move.l   matTx(A3),D0
X   move.l   D2,D1
X   math     SPMul
X   move.l   D0,D4
X
X   move.l   matTy(A3),D0
X   move.l   D3,D1
X   math     SPMul
X   move.l   D4,D1
X   math     SPAdd
X   move.l   matTx(A2),D1
X   math     SPAdd
X   move.l   D0,matTx(A2)
X
X   rts
X
X  DEF    dtransform
X   lea      y_dtransform,A0
X   bra      domatrix
Xy_dtransform
X   bsr      popr
X   move.l   D0,D3
X   bsr      popr
X   move.l   D0,D2
X   bsr      xxy
X   move.l   vcurrx,D0
X   move.l   matTx(A2),D1
X   math     SPSub
X   move.w   #Real,D2
X   bsr      r.ipush
X   move.l   vcurry,D0
X   move.l   matTy(A2),D1
X   math     SPSub
X   bra      r.ipush
X
X  DEF    transform
X   lea      y_transform,A0
X   bra      domatrix
Xy_transform
X   bsr      popr
X   move.l   D0,D3
X   bsr      popr
X   move.l   D0,D2
X   bsr      xxy
X   move.w   #Real,D2
X   move.l   vcurrx,D0
X   bsr      r.ipush
X   move.l   vcurry,D0
X   bra      r.ipush
X
X
X  DEF    currentpoint
X   move.w   #Real,D2
X   move.l   currx,D0
X   bsr      r.ipush
X   move.l   curry,D0
X   bra      r.ipush
X
X   xdef     poprxy
Xpoprxy
X   bsr      popr
X   move.l   curry,D1
X   math     SPAdd
X   move.l   D0,D3
X   bsr      popr
X   move.l   currx,D1
X   math     SPAdd
X   move.l   D0,D2
X   bra      xy
X
X
X   xdef     popxy
X* get coordinate from stack and convert
X* to screen address in D0=x and D1=y
X* also, in real form, D2=x and D3=y
Xpopxy
X   bsr      popr
X   move.l   D0,D3
X   bsr      popr
X   move.l   D0,D2
Xxy
X   movem.l  D2/D3,currx
X   lea      CTM,A2
Xxxy
X   move.l   (A2),D1
X   bsr      rmul        ax
X   move.l   matTx(A2),D1
X   math     SPAdd       + tx
X   move.l   D0,D4
X   exg      D2,D3
X   move.l   matC(A2),D1
X   bsr      rmul        cy
X   move.l   D4,D1
X   math     SPAdd       + cy
X   move.l   D0,vcurrx
X
X   move.l   #PointFive,D1
X   math     SPAdd
X   math     SPFix
X   move.l   D0,-(SP)
X
X   exg      D2,D3
X   move.l   matB(A2),D1
X   bsr      rmul        bx
X   move.l   matTy(A2),D1
X   math     SPAdd       + ty
X   move.l   D0,D4
X   exg      D2,D3
X   move.l   matD(A2),D1
X   bsr      rmul        dy
X   move.l   D4,D1
X   exg      D2,D3
X   math     SPAdd       + dy
X   move.l   D0,vcurry
X
X* times 200/512 = 25/64 = .390625
X   move.l   #VFactor,D1
X   math     SPMul
X
X   move.l   D0,D3    for antiraster lineto
X   move.l   vcurrx,D2
X
X   move.l   #PointFive,D1
X   math     SPAdd
X   math     SPFix
X   move.l   #MaxY,D1
X   sub.l    D0,D1
X
X   move.l   (SP)+,D0
X   rts
X
X  DEF    currentlinewidth
X   move.l   linewidth,D0
X   bra      retreal
X
X  DEF    setlinewidth
X   bsr      popr
X   tst.b    D0
X   bmi      type_mismatch
X   move.l   D0,linewidth
X   rts
X
X* called by stroke to see if lines currently have width
X* should return D0=1 if so, D0=0 if not
X   xdef     checklwidth
Xchecklwidth
X   move.l   linewidth,D0
X   move.l   #PointFive,D1
X   math     SPMul
X   move.l   D0,D2
X   move.l   D2,D3
X   bsr      deltaxy
X   or.l     D2,D3
X   bne      1$
X   moveq    #0,D0
X   rts
X1$ moveq    #1,D0
X   rts
X
Xdeltaxy
X   move.l   A2,-(SP)
X   lea      CTM,A2
X*   move.l   matB(A2),-(SP)
X*   move.l   matC(A2),-(SP)
X   move.l   matTx(A2),-(SP)
X   move.l   matTy(A2),-(SP)
X*   clr.l    matB(A2)
X*   clr.l    matC(A2)
X   clr.l    matTx(A2)
X   clr.l    matTy(A2)
X   bsr      xxy
X   move.l   (SP)+,matTy(A2)
X   move.l   (SP)+,matTx(A2)
X*   move.l   (SP)+,matC(A2)
X*   move.l   (SP)+,matB(A2)
X   move.l   (SP)+,A2
X
X   move.l   D0,D2
X   bpl      1$
X   neg.l    D2
X1$
X   move.l   D3,D0
X   and.b    #$7F,D0
X   move.l   #PointFive,D1
X   math     SPAdd
X   math     SPFix
X   move.l   D0,D3
X
X   rts
X
X* called by stroke routine to calculate
X* x and y components of linewidth
X* A3 -> source: (int,int) (real,real)
X* A4 -> dest:    ditto
X* returns D2=dx D3=dy
X   xdef     xywidth
Xxywidth
X   move.l   linewidth,D0
X   move.l   #PointFive,D1
X   math     SPMul
X   move.l   D0,-(SP)
X
X   move.l   12(A4),D0      y1
X   move.l   12(A3),D1      y0
X   math     SPSub             y1 - y0
X   move.l   #VFactor,D1
X   math     SPDiv
X   move.l   D0,D2
X
X   move.l   8(A4),D0       x1
X   move.l   8(A3),D1       x0
X   math     SPSub             x1 - x0
X
X   tst.b    D0
X   bne      1$
X   moveq    #0,D3          cos = 0
X   move.l   (SP),D0        sin = 1
X   bra      2$
X1$
X   move.l   D0,D1
X   move.l   D2,D0
X   math     SPDiv       (y1-y0)/(x1-x0)
X   and.b    #$7F,D0
X
X   ieee     atan
X   move.l   D0,D2
X   ieee     cos
X   move.l   D0,D3
X   move.l   D2,D0
X   ieee     sin
X
X   move.l   (SP),D1
X   math     SPMul
X2$
X   move.l   D0,D2
X
X   move.l   (SP)+,D1
X   move.l   D3,D0
X   math     SPMul
X   move.l   D0,D3
X
X   movem.l  D2/D3,-(SP)
X   exg      D2,D3
X   bsr      deltaxy
X   exg      D2,D3
X
X   bsr      22$
X   move.l   D2,D0
X   move.l   D3,D1
X   movem.l  (SP)+,D2/D3
X
X   movem.l  D0/D1,-(SP)
X   bsr      21$
X   movem.l  (SP)+,D0/D1
X   rts
X
X21$
X   bsr      deltaxy
X22$
X
X   move.l   (A4),D0
X   cmp.l    (A3),D0
X   bne      3$
X   moveq    #0,D3
X   bra      4$
X3$ bpl      4$
X   neg.l    D3
X4$ move.l   4(A4),D0
X   cmp.l    4(A3),D0
X   bne      5$
X   moveq    #0,D2
X   bra      6$
X5$ blt      6$
X   neg.l    D2
X6$
X   rts
X
X
X
X   xdef     xadvance
Xxadvance
X   math     SPFlt
X   move.l   currx,D1
X   math     SPAdd
X   move.l   D0,D2
X   move.l   curry,D3
X   bra      xy
X
X  DEF    setflat
X   bsr      popr
X   and.b    #$7F,D0
X   cmp.b    #$42,D0
X   bcs      type_mismatch
X   move.l   D0,flatness
X   rts
X  DEF    currentflat
X   move.l   flatness,D0
X   RETURN   Real
X
X
Xctx0     equ   0
Xcty0     equ   4
Xctx1     equ   8
Xcty1     equ  12
Xctx2     equ  16
Xcty2     equ  20
Xctx3     equ  24
Xcty3     equ  28
X
Xctax     equ   0
Xctbx     equ   8
Xctcx     equ  16
X
X  DEF    rcurveto
X   moveq    #-1,D0
X   bra      ..crvt
X
X  DEF    curveto
X   moveq    #0,D0
X..crvt
X   movem.l  D6/D7/A3/A4,-(SP)
X   move.l   D0,D6
X   lea      ct_xy,A4
X   lea      currx,A3
X   bsr      ctxystow
X   bsr      popxy
X   lea      16(A4),A4
X   bsr      ctxystow
X   bsr      popxy
X   lea      -16(A4),A4
X   bsr      ctxystow
X   bsr      popxy
X   lea      -16(A4),A4
X   bsr      ctxystow
X
X   lea      ct_xy,A3
X   tst.l    D6
X   beq      11$
X
X   lea      ctx1(A3),A4
X   moveq    #2,D3
X10$
X   move.l   (A3),D0
X   move.l   (A4),D1
X   math     SPAdd
X   move.l   D0,(A4)+
X   move.l   cty0(A3),D0
X   move.l   (A4),D1
X   math     SPAdd
X   move.l   D0,(A4)+
X   dbra     D3,10$
X
X11$
X   lea      ct_abc,A4
X   bsr      ctabcfigure
X   movem.l  D4/A3/A4,-(SP)
X   lea      4(A3),A3
X   lea      4(A4),A4
X   bsr      ctabcfigure
X   move.l   D4,D3
X   movem.l  (SP)+,D4/A3/A4
X* D3 = y3 - y0; D4 = x3 - x0
X   and.b    #$7F,D4
X   and.b    #$7F,D3
X   move.l   D4,D0
X   move.l   D3,D1
X   math     SPCmp
X   bgt      1$
X   move.l   D3,D4
X1$
X   move.l   D4,D1
X   move.l   flatness,D0  (make setable)
X   math     SPDiv          dt = 4/dx or 4/dy
X   tst.b    D0
X   beq      100$
X
X   move.l   D0,D7
X   move.l   D7,D3
X
X   moveq    #-1,D4
X   move.l   (A3),D0
X   move.l   cty0(A3),D1
X   bsr      ctto
X
X2$
X   cmp.b    #$41,D3
X   blt      3$
X   move.l   ctx3(A3),D0
X   move.l   cty3(A3),D1
X   clr.l    D4
X   bsr      ctto
X   bra      100$
X3$
X   bsr      ctxfigure
X   movem.l  D0/A3/A4,-(SP)
X   lea      4(A3),A3
X   lea      4(A4),A4
X   bsr      ctxfigure
X   move.l   D0,D1
X   movem.l  (SP)+,D0/A3/A4
X
X   clr.l    D4
X   bsr      ctto
X
X   move.l   D7,D0
X   move.l   D3,D1
X   math     SPAdd
X   move.l   D0,D3
X   bra      2$
X
X100$
X   movem.l  (SP)+,D6/D7/A3/A4
X   rts
X
Xctto
X   movem.l  D3/A3/A4,-(SP)
X   move.l   D0,D2
X   move.l   D1,D3
X   bsr      xy
X   tst.l    D4
X   bne      1$
X   bsr      ylineto
X   bra      2$
X1$ bsr      ymoveto
X2$ movem.l  (SP)+,D3/A3/A4
X   rts
X
Xctabcfigure
X   move.l   ctx1(A3),D0
X   move.l   ctx0(A3),D1
X   math     SPSub
X   move.l   #ThreePoint,D1
X   move.l   D1,D2
X   math     SPMul
X   move.l   D0,ctcx(A4)
X   move.l   D0,D3
X
X   move.l   ctx2(A3),D0
X   move.l   ctx1(A3),D1
X   math     SPSub
X   move.l   D2,D1
X   math     SPMul
X   move.l   D3,D1
X   math     SPSub
X   move.l   D0,ctbx(A4)
X   move.l   D0,D2
X
X   move.l   ctx3(A3),D0
X   move.l   ctx0(A3),D1
X   math     SPSub
X   move.l   D0,D4
X   move.l   D2,D1
X   math     SPSub
X   move.l   D3,D1
X   math     SPSub
X   move.l   D0,ctax(A4)
X
X   rts
X
X* D3 = t
Xctxfigure
X   move.l   ctax(A4),D0
X   move.l   D3,D1
X   math     SPMul
X   move.l   ctbx(A4),D1
X   math     SPAdd
X   move.l   D3,D1
X   math     SPMul
X   move.l   ctcx(A4),D1
X   math     SPAdd
X   move.l   D3,D1
X   math     SPMul
X   move.l   (A3),D1
X   math     SPAdd
X   rts
X
X
Xctxystow
X   move.l   A3,-(SP)
X   move.l   (A3)+,(A4)+
X   move.l   (A3)+,(A4)+
X   move.l   (SP)+,A3
X   rts
X
X
Xct_xy    dcb.l    8,0
Xct_abc   dcb.l    6,0
X
X
X  DEF    makefont
X  ARG    Array
X   bsr      _fontalloc
X   move.l   A0,D1
X   move.w   #-1,(A0)+
X   move.w   #Array,(A0)+
X   move.l   D0,(A0)+
X  ARG    FontID
X   move.l   D0,A0
X   tst.w    (A0)
X   bpl      type_mismatch
X   move.l   D1,D0
X   RETURN   FontID
X
X
X  DEF    scaleg
X   bsr      popr
X   bsr      _fontalloc
X   move.l   A0,D1
X   move.w   #-1,(A0)+
X   move.w   #Real,(A0)+
X   move.l   D0,(A0)+
X  ARG    FontID
X   move.l   D1,D0
X   RETURN   FontID
X
X
Xinitfctm
X
X* copy current CTM to fCTM
X   moveq    #5,D1
X   lea      CTM,A0
X   lea      fCTM,A1
X   move.l   A0,A2
X1$ move.l   (A0)+,(A1)+
X   dbra     D1,1$
X 
X* translate to current position
X   move.l   curry,D3
X   move.l   currx,D2
X   bsr      xxy
X   lea      fCTM,A2
X   move.l   vcurry,matTy(A2)
X   move.l   vcurrx,matTx(A2)
X
X* zero temp matrix
X   lea      tempmatrix,A0
X   moveq    #5,D1
X   moveq    #0,D0
X2$ move.l   D0,(A0)+
X   dbra     D1,2$
X
X   move.l   currfont,A0
X   tst.w    (A0)+
X   bmi      3$
X   move.l   #OnePoint,D0      ??
X   bra      4$
X3$
X   move.w   (A0)+,D2
X   move.l   (A0),D0
X   cmp.w    #Real,D2
X   bne      5$
X4$
X   lea      tempmatrix,A0
X   move.l   D0,(A0)
X   move.l   D0,matD(A0)
X   bra      6$
X5$
X   cmp.w    #Array,D2
X   bne      type_mismatch
X   bsr      arraytomatrix
X
X6$
X   lea      tempmatrix,A2
X   move.w   simplex_base,D0
X   ext.l    D0
X   math     SPFlt
X   move.l   matTy(A2),D1
X   math     SPAdd
X   move.l   D0,matTy(A2)
X
X* scale down by nominal height
X   move.w   simplex_height,D0
X   ext.l    D0
X   math     SPFlt
X   move.l   D0,D1
X   move.l   #OnePoint,D0
X   math     SPDiv
X   move.l   D0,D2
X   move.l   D0,D3
X   bsr      xscale
X
X* save 'a' for currentpoint update
X   move.l   (A2),simplex_scale
X
X* concat with copy of CTM
X   lea      tempmatrix,A0
X   lea      fCTM,A2
X   bsr      y_concat
X
X   lea      fCTM,A2
X
X   rts
X
X
X   xdef  _lengthg
X_lengthg
X   movem.l  D5/D6,-(SP)
X   moveq    #0,D6
X   bra      ..shwg
X
X  DEF    charpath
X  ARG    Boolean
X   beq      1$
X   move.b   #1,strokepathflag
X1$
X   movem.l  D5/D6,-(SP)
X   moveq    #-1,D6
X   bra      ..shwg
X
X  DEF    showg
X   movem.l  D5/D6,-(SP)
X   moveq    #1,D6
X..shwg
X   bsr      initfctm    henceforth A2 -> fCTM
X
X  ARG    String
X
X   move.l   D0,A0
X   moveq    #0,D0
X   move.l   D0,lastx
X   move.l   D0,xoffset
X   move.w   (A0)+,D3
X1$
X   subq.w   #1,D3
X   bpl      2$
X
X   move.l   lastx,D0
X   math     SPFlt
X
X   move.l   simplex_scale,D1
X   math     SPMul
X
X   move.l   D6,D4
X   movem.l  (SP)+,D5/D6
X
X   tst.l    D4
X   bne      10$
X   move.w   #Real,D2
X   bsr      r.ipush
X   moveq    #0,D0
X   bra      r.ipush
X
X10$
X   move.l   currx,D1
X   math     SPAdd
X   move.l   D0,D2
X   move.l   curry,D3
X   bsr      xy
X   tst.l    D4
X   bpl      xmoveto
X   bra      ymoveto
X
X2$
X   moveq    #0,D0
X   move.b   (A0)+,D0
X   movem.l  D3/A0,-(SP)
X   bsr      drawchar
X   movem.l  (SP)+,D3/A0
X   bra      1$
X
X
Xdrawchar
X   cmp.b    #' ',D0
X   bcs      ..dcret
X   cmp.b    #$7F,D0
X   bhi      ..dcret
X
X   sub.b    #' ',D0
X   add.l    D0,D0
X   lea      simplex,A0
X   move.l   A0,A3
X   add.l    D0,A0
X   add.w    (A0),A3
X
X
X* x-offset to center of character
X
X   move.b   (A3)+,D0    left bound
X   ext.w    D0
X   ext.l    D0
X   neg.l    D0
X   move.l   lastx,D1
X   add.l    D1,D0
X   move.l   D0,xoffset
X   move.l   D0,D2       save to update currx
X
X* update currx
X   move.b   (A3)+,D0    right bound
X   ext.w    D0
X   ext.l    D0
X   add.l    D2,D0
X   move.l   D0,lastx
X
X   tst.l    D6
X   beq      ..dcret
X
X   clr.l    D5          pen is up
X
Xf_endchar   equ   0
Xf_penup     equ   1
Xf_closepath equ   2
X
X
X* start drawing
Xnextpoint
X   move.b   (A3)+,D0    x
X   move.b   (A3)+,D3    y
X   cmp.b    #64,D0      special command?
X   bne      dopoint
X   cmp.b    #f_endchar,D3
X   bne      ..dc1
X..dcret
X   rts
X
X..dc1
X   cmp.b    #f_closepath,D3
X   bne      ..dc2
X   tst.l    D6
X   bpl      1$
X   bsr      _closepath
X   bra      2$
X1$ bsr      xclosepath
X2$ clr.l    D5          pen up
X   bra      nextpoint
X
X..dc2
X   cmp.b    #f_penup,D3
X   bne      nextpoint   unknown
X   clr.l    D5          pen up
X   bra      nextpoint
X
Xdopoint
X   ext.w    D0
X   ext.l    D0
X   move.l   xoffset,D1
X   add.l    D1,D0
X   math     SPFlt
X   move.l   D0,D2
X
X   move.b   D3,D0
X   ext.w    D0
X   ext.l    D0
X   neg.l    D0
X   math     SPFlt
X   move.l   D0,D3
X   bsr      xxy            get device coordinates
X   tst.l    D5
X   bmi      3$
X
X   tst.l    D6
X   bpl      1$
X   bsr      ymoveto
X   bra      2$
X1$ bsr      xmoveto
X2$ moveq    #-1,D5         now pen is down
X   bra      nextpoint
X
X3$ tst.l    D6
X   bpl      4$
X   bsr      ylineto
X   bra      nextpoint
X
X4$ bsr      xlineto
X   bra      nextpoint
X
X
X
X   section  three,data
X
X
XCTM
X   dc.l     OnePoint
X   dc.l     0
X   dc.l     0
X   dc.l     OnePoint
X   dc.l     0
X   dc.l     0
Xcurrx
X   dc.l     0
Xcurry
X   dc.l     0
Xvcurrx
X   dc.l     0
Xvcurry
X   dc.l     0
Xlinewidth
X   dc.l     0
Xflatness
X   dc.l     FourPoint     not saved
X
X
X
XfCTM
X   dc.l     OnePoint
X   dc.l     0
X   dc.l     0
X   dc.l     OnePoint
X   dc.l     0
X   dc.l     0
X
Xlastx          dc.l     0
Xxoffset        dc.l     0
X
Xsimplex_scale  dc.l     $BA2E8C3C   1/22
Xsimplex_base   dc.w     9
Xsimplex_height dc.w     22
X
Xgsavecnt       dc.w     0
X
X   bstr     gsov,<gsave overflow>
X   bstr     gsuv,<grestore underflow>
X   bstr     divzero,<divide by zero>
X   bstr     materror,<matrix error>
X
X   section  mroom,bss
X
Xtempmatrix  ds.l  6
Xtemp2matrix ds.l  6
XsCTM        ds.l  PstackSize*GsaveSize
X
X   end
X
X
\Rogue\Monster\
else
  echo "will not over write ./rmath.a"
fi
if [ `wc -c ./rmath.a | awk '{printf $1}'` -ne 25500 ]
then
echo `wc -c ./rmath.a | awk '{print "Got " $1 ", Expected " 25500}'`
fi
if `test ! -s ./rotate-box`
then
echo "writing ./rotate-box"
sed 's/^X//' > ./rotate-box << '\Rogue\Monster\'
X
X3 pencolor
X2 penmode
Xsave
X
X/b {-10 -10  moveto
X    -10  10  lineto
X     10  10  lineto
X     10 -10  lineto
X    -10 -10  lineto
X} def
X
X400 200 translate
X
X20 { b
X     fill
X     5 rotate
X     1.1 1.1 scale
X   } repeat
X
Xrestore
X0 penmode
X
\Rogue\Monster\
else
  echo "will not over write ./rotate-box"
fi
if [ `wc -c ./rotate-box | awk '{printf $1}'` -ne 236 ]
then
echo `wc -c ./rotate-box | awk '{print "Got " $1 ", Expected " 236}'`
fi
if `test ! -s ./show-fonts`
then
echo "writing ./show-fonts"
sed 's/^X//' > ./show-fonts << '\Rogue\Monster\'
X
Xsave
X
X/psize 20 string def
X
X/Fsample   {
X   2 copy
X   /simplex findfont 12 scalefont setfont
X   exch show
X   (  ) show
X   psize cvs show
X   exch findfont exch scalefont setfont
X   currentpoint exch pop 145 exch moveto
X   (abcdef ABCDEF ) show
X   } def
X
X/newline  {
X   currentpoint exch pop 30 exch 30 sub
X   moveto
X   } def
X
X30 350 moveto
X
X(topaz)    8  Fsample newline
X(topaz)    9  Fsample newline
X(diamond) 12  Fsample newline
X(garnet)   9  Fsample newline
X(garnet)  16  Fsample newline
X(ruby)     8  Fsample newline
X(ruby)    12  Fsample newline
X(sapphire)19  Fsample newline
X(emerald) 20  Fsample newline
X
X restore
X
\Rogue\Monster\
else
  echo "will not over write ./show-fonts"
fi
if [ `wc -c ./show-fonts | awk '{printf $1}'` -ne 622 ]
then
echo `wc -c ./show-fonts | awk '{print "Got " $1 ", Expected " 622}'`
fi
if `test ! -s ./simplex.chr`
then
echo "writing ./simplex.chr"
sed 's/^X//' > ./simplex.chr << '\Rogue\Monster\'
X
X
X   xdef  simplex
X
X   section  font,data
X
Xrefchar  macro
X         dc.w  .\1-fbase
X         endm
X
Xendchar  macro
X         dc.b  64,0
X         endm
X
Xpenup    macro
X         dc.b  64,1
X         endm
X
Xclosepath  macro
X         dc.b  64,2
X         endm
X
Xsimplex
X
Xfbase
X
X refchar h20
X refchar h21
X refchar h22
X refchar h23
X refchar h24
X refchar h25
X refchar h26
X refchar h27
X refchar h28
X refchar h29
X refchar h2A
X refchar h2B
X refchar h2C
X refchar h2D
X refchar h2E
X refchar h2F
X refchar d0
X refchar d1
X refchar d2
X refchar d3
X refchar d4
X refchar d5
X refchar d6
X refchar d7
X refchar d8
X refchar d9
X refchar h3A
X refchar h3B
X refchar h3C
X refchar h3D
X refchar h3E
X refchar h3F
X refchar h40
X
X
X
X refchar A
X refchar B
X refchar C
X refchar D
X refchar E
X refchar F
X refchar G
X refchar H
X refchar I
X refchar J
X refchar K
X refchar L
X refchar M
X refchar N
X refchar O
X refchar P
X refchar Q
X refchar R
X refchar S
X refchar T
X refchar U
X refchar V
X refchar W
X refchar X
X refchar Y
X refchar Z
X
X refchar h5B
X refchar h5C
X refchar h5D
X refchar h5E
X refchar h5F
X refchar h60
X
X refchar a
X refchar b
X refchar c
X refchar d
X refchar e
X refchar f
X refchar g
X refchar h
X refchar i
X refchar j
X refchar k
X refchar l
X refchar m
X refchar n
X refchar o
X refchar p
X refchar q
X refchar r
X refchar s
X refchar t
X refchar u
X refchar v
X refchar w
X refchar x
X refchar y
X refchar z
X
X refchar h7B
X refchar h7C
X refchar h7D
X refchar h7E
X refchar h7F
X
X***********************
X
X.h20
X   dc.b  -6,6
X endchar
X
X.h21
X   dc.b  -5,5
X   dc.b  0,-12
X   dc.b  0,2
X penup
X   dc.b  0,7
X   dc.b  -1,8
X   dc.b  0,9
X   dc.b  1,8
X   dc.b  0,7
X endchar
X
X.h22
X   dc.b  -8,8
X   dc.b  -4,-12
X   dc.b  -4,-5
X penup
X   dc.b  4,-12
X   dc.b  4,-5
X endchar
X
X.h23
X   dc.b  -10,11
X   dc.b  1,-12
X   dc.b  -6,16
X penup
X   dc.b  7,-12
X   dc.b  0,16
X penup
X   dc.b  -6,-1
X   dc.b  8,-1
X   dc.b  -7,5
X   dc.b  7,5
X endchar
X
X.h24
X   dc.b  -10,10
X   dc.b  -2,-12
X   dc.b  -2,11
X penup
X   dc.b  2,-12
X   dc.b  2,11
X penup
X   dc.b  7,-7
X   dc.b  5,-9
X   dc.b  2,-10
X   dc.b  -5,-9
X   dc.b  -7,-7
X   dc.b  -7,-6
X   dc.b  -6,-4
X   dc.b  -5,-3
X   dc.b  -3,-2
X   dc.b  3,0
X   dc.b  5,1
X   dc.b  6,2
X   dc.b  7,4
X   dc.b  7,6
X   dc.b  5,8
X   dc.b  2,9
X   dc.b  -2,9
X   dc.b  -5,8
X   dc.b  -7,6
X endchar
X
X.h25
X   dc.b  -12,12
X   dc.b  9,-12
X   dc.b  -9,9
X penup
X   dc.b  -4,-12
X   dc.b  -2,-10
X   dc.b  -2,-8
X   dc.b  -3,-6
X   dc.b  -5,-5
X   dc.b  -7,-5
X   dc.b  -9,-7
X   dc.b  -9,-9
X   dc.b  -8,-11
X   dc.b  -6,-12
X   dc.b  -4,-12
X   dc.b  -2,-11
X   dc.b  1,-10
X   dc.b  4,-10
X   dc.b  7,-11
X   dc.b  9,-12
X penup
X   dc.b  5,2
X   dc.b  3,3
X   dc.b  2,5
X   dc.b  2,7
X   dc.b  4,9
X   dc.b  6,9
X   dc.b  8,8
X   dc.b  9,6
X   dc.b  9,4
X   dc.b  7,2
X   dc.b  5,2
X endchar
X
X.h26
X   dc.b  -13,13
X   dc.b  10,-3
X   dc.b  10,-4
X   dc.b  9,-5
X   dc.b  8,-5
X   dc.b  7,-4
X   dc.b  6,-2
X   dc.b  4,3
X   dc.b  2,6
X   dc.b  0,8
X   dc.b  -2,9
X   dc.b  -6,9
X   dc.b  -8,8
X   dc.b  -9,7
X   dc.b  -10,5
X   dc.b  -10,3
X   dc.b  -9,1
X   dc.b  -8,0
X   dc.b  -1,-4
X   dc.b  0,-5
X   dc.b  1,-7
X   dc.b  1,-9
X   dc.b  0,-11
X   dc.b  -2,-12
X   dc.b  -4,-11
X   dc.b  -5,-9
X   dc.b  -5,-7
X   dc.b  -4,-4
X   dc.b  -2,-1
X   dc.b  3,6
X   dc.b  5,8
X   dc.b  7,9
X   dc.b  9,9
X   dc.b  10,8
X   dc.b  10,7
X endchar
X
X.h27
X   dc.b  -4,4
X   dc.b  3,-12
X   dc.b  0,-5
X endchar
X
X.h28
X   dc.b  -7,7
X   dc.b  4,-12
X   dc.b  2,-10
X   dc.b  0,-8
X   dc.b  -2,-5
X   dc.b  -3,0
X   dc.b  -3,4
X   dc.b  -2,9
X   dc.b  0,12
X   dc.b  2,14
X   dc.b  4,16
X endchar
X
X.h29
X   dc.b  -7,7
X   dc.b  -4,-12
X   dc.b  -2,-10
X   dc.b  0,-8
X   dc.b  2,-5
X   dc.b  3,0
X   dc.b  3,4
X   dc.b  2,9
X   dc.b  0,12
X   dc.b  -2,14
X   dc.b  -4,16
X endchar
X
X.h2A
X   dc.b  -8,8
X   dc.b  0,-6
X   dc.b  0,6
X penup
X   dc.b  -5,-3
X   dc.b  5,3
X penup
X   dc.b  5,-3
X   dc.b  -5,3
X endchar
X
X.h2B
X   dc.b  -13,13
X   dc.b  0,-9
X   dc.b  0,9
X penup
X   dc.b  -9,0
X   dc.b  9,0
X endchar
X
X.h2C
X   dc.b  -5,5
X   dc.b  1,8
X   dc.b  0,9
X   dc.b  -1,8
X   dc.b  0,7
X   dc.b  1,8
X   dc.b  1,10
X   dc.b  0,12
X   dc.b  -1,13
X endchar
X
X.h2D
X   dc.b  -13,13
X   dc.b  -4,0
X   dc.b  4,0
X endchar
X
X.h2E
X   dc.b  -5,5
X   dc.b  0,7
X   dc.b  -1,8
X   dc.b  0,9
X   dc.b  1,8
X   dc.b  0,7
X endchar
X
X.h2F
X   dc.b  -11,11
X   dc.b  9,-12
X   dc.b  -9,16
X endchar
X
X.d0
X   dc.b  -10,10
X   dc.b  -1,-12
X   dc.b  -4,-11
X   dc.b  -6,-8
X   dc.b  -7,-3
X   dc.b  -7,0
X   dc.b  -6,5
X   dc.b  -4,8
X   dc.b  -1,9
X   dc.b  1,9
X   dc.b  4,8
X   dc.b  6,5
X   dc.b  7,0
X   dc.b  7,-3
X   dc.b  6,-8
X   dc.b  4,-11
X   dc.b  1,-12
X   dc.b  -1,-12
X endchar
X
X.d1
X   dc.b  -10,10
X   dc.b  -4,-8
X   dc.b  -2,-9
X   dc.b  1,-12
X   dc.b  1,9
X endchar
X
X.d2
X   dc.b  -10,10
X   dc.b  -6,-7
X   dc.b  -6,-8
X   dc.b  -5,-10
X   dc.b  -4,-11
X   dc.b  -2,-12
X   dc.b  2,-12
X   dc.b  4,-11
X   dc.b  5,-10
X   dc.b  6,-8
X   dc.b  6,-6
X   dc.b  5,-4
X   dc.b  3,-1
X   dc.b  -7,9
X   dc.b  7,9
X endchar
X
X.d3
X   dc.b  -10,10
X   dc.b  -5,-12
X   dc.b  6,-12
X   dc.b  0,-4
X   dc.b  3,-4
X   dc.b  5,-3
X   dc.b  6,-2
X   dc.b  7,1
X   dc.b  7,3
X   dc.b  6,6
X   dc.b  4,8
X   dc.b  1,9
X   dc.b  -2,9
X   dc.b  -5,8
X   dc.b  -6,7
X   dc.b  -7,5
X endchar
X
X.d4
X   dc.b  -10,10
X   dc.b  3,-12
X   dc.b  -7,2
X   dc.b  8,2
X penup
X   dc.b  3,-12
X   dc.b  3,9
X endchar
X
X.d5
X   dc.b  -10,10
X   dc.b  5,-12
X   dc.b  -5,-12
X   dc.b  -6,-3
X   dc.b  -5,-4
X   dc.b  -2,-5
X   dc.b  1,-5
X   dc.b  4,-4
X   dc.b  6,-2
X   dc.b  7,1
X   dc.b  7,3
X   dc.b  6,6
X   dc.b  4,8
X   dc.b  1,9
X   dc.b  -2,9
X   dc.b  -5,8
X   dc.b  -6,7
X   dc.b  -7,5
X endchar
X
X.d6
X   dc.b  -10,10
X   dc.b  6,-9
X   dc.b  5,-11
X   dc.b  2,-12
X   dc.b  0,-12
X   dc.b  -3,-11
X   dc.b  -5,-8
X   dc.b  -6,-3
X   dc.b  -6,2
X   dc.b  -5,6
X   dc.b  -3,8
X   dc.b  0,9
X   dc.b  1,9
X   dc.b  4,8
X   dc.b  6,6
X   dc.b  7,3
X   dc.b  7,2
X   dc.b  6,-1
X   dc.b  4,-3
X   dc.b  1,-4
X   dc.b  0,-4
X   dc.b  -3,-3
X   dc.b  -5,-1
X   dc.b  -6,2
X endchar
X
X.d7
X   dc.b  -10,10
X   dc.b  7,-12
X   dc.b  -3,9
X penup
X   dc.b  -7,-12
X   dc.b  7,-12
X endchar
X
X.d8
X   dc.b  -10,10
X   dc.b  -2,-12
X   dc.b  -5,-11
X   dc.b  -6,-9
X   dc.b  -6,-7
X   dc.b  -5,-5
X   dc.b  -3,-4
X   dc.b  1,-3
X   dc.b  4,-2
X   dc.b  6,0
X   dc.b  7,2
X   dc.b  7,5
X   dc.b  6,7
X   dc.b  5,8
X   dc.b  2,9
X   dc.b  -2,9
X   dc.b  -5,8
X   dc.b  -6,7
X   dc.b  -7,5
X   dc.b  -7,2
X   dc.b  -6,0
X   dc.b  -4,-2
X   dc.b  -1,-3
X   dc.b  3,-4
X   dc.b  5,-5
X   dc.b  6,-7
X   dc.b  6,-9
X   dc.b  5,-11
X   dc.b  2,-12
X   dc.b  -2,-12
X endchar
X
X.d9
X   dc.b  -10,10
X   dc.b  6,-5
X   dc.b  5,-2
X   dc.b  3,0
X   dc.b  0,1
X   dc.b  -1,1
X   dc.b  -4,0
X   dc.b  -6,-2
X   dc.b  -7,-5
X   dc.b  -7,-6
X   dc.b  -6,-9
X   dc.b  -4,-11
X   dc.b  -1,-12
X   dc.b  0,-12
X   dc.b  3,-11
X   dc.b  5,-9
X   dc.b  6,-5
X   dc.b  6,0
X   dc.b  5,5
X   dc.b  3,8
X   dc.b  0,9
X   dc.b  -2,9
X   dc.b  -5,8
X   dc.b  -6,6
X endchar
X
X.h3A
X   dc.b  -5,5
X   dc.b  0,-5
X   dc.b  -1,-4
X   dc.b  0,-3
X   dc.b  1,-4
X   dc.b  0,-5
X penup
X   dc.b  0,7
X   dc.b  -1,8
X   dc.b  0,9
X   dc.b  1,8
X   dc.b  0,7
X endchar
X
X.h3B
X   dc.b  -5,5
X   dc.b  0,-5
X   dc.b  -1,-4
X   dc.b  0,-3
X   dc.b  1,-4
X   dc.b  0,-5
X penup
X   dc.b  1,8
X   dc.b  0,9
X   dc.b  -1,8
X   dc.b  0,7
X   dc.b  1,8
X   dc.b  1,10
X   dc.b  0,12
X   dc.b  -1,13
X endchar
X
X.h3C
X   dc.b  -12,12
X   dc.b  8,-9
X   dc.b  -8,0
X   dc.b  8,9
X endchar
X
X.h3D
X   dc.b  -13,13
X   dc.b  -9,-3
X   dc.b  9,-3
X penup
X   dc.b  -9,3
X   dc.b  9,3
X endchar
X
X.h3E
X   dc.b  -12,12
X   dc.b  -8,-9
X   dc.b  8,0
X   dc.b  -8,9
X endchar
X
X.h3F
X   dc.b  -9,9
X   dc.b  -6,-7
X   dc.b  -6,-8
X   dc.b  -5,-10
X   dc.b  -4,-11
X   dc.b  -2,-12
X   dc.b  2,-12
X   dc.b  4,-11
X   dc.b  5,-10
X   dc.b  6,-8
X   dc.b  6,-6
X   dc.b  5,-4
X   dc.b  4,-3
X   dc.b  0,-1
X   dc.b  0,2
X penup
X   dc.b  0,7
X   dc.b  -1,8
X   dc.b  0,9
X   dc.b  1,8
X   dc.b  0,7
X endchar
X
X.h40
X   dc.b  -13,14
X   dc.b  5,-4
X   dc.b  4,-6
X   dc.b  2,-7
X   dc.b  -1,-7
X   dc.b  -3,-6
X   dc.b  -4,-5
X   dc.b  -5,-2
X   dc.b  -5,1
X   dc.b  -4,3
X   dc.b  -2,4
X   dc.b  1,4
X   dc.b  3,3
X   dc.b  4,1
X penup
X   dc.b  -1,-7
X   dc.b  -3,-5
X   dc.b  -4,-2
X   dc.b  -4,1
X   dc.b  -3,3
X   dc.b  -2,4
X penup
X   dc.b  5,-7
X   dc.b  4,1
X   dc.b  4,3
X   dc.b  6,4
X   dc.b  8,4
X   dc.b  10,2
X   dc.b  11,-1
X   dc.b  11,-3
X   dc.b  10,-6
X   dc.b  9,-8
X   dc.b  7,-10
X   dc.b  5,-11
X   dc.b  2,-12
X   dc.b  -1,-12
X   dc.b  -4,-11
X   dc.b  -6,-10
X   dc.b  -8,-8
X   dc.b  -9,-6
X   dc.b  -10,-3
X   dc.b  -10,0
X   dc.b  -9,3
X   dc.b  -8,5
X   dc.b  -6,7
X   dc.b  -4,8
X   dc.b  -1,9
X   dc.b  2,9
X   dc.b  5,8
X   dc.b  7,7
X   dc.b  8,6
X penup
X   dc.b  6,-7
X   dc.b  5,1
X   dc.b  5,3
X   dc.b  6,4
X endchar
X
X
X
X.A
X   dc.b  -9,9
X*   dc.b  0,-12
X   dc.b  -8,9
X* penup
X   dc.b  0,-12
X   dc.b  8,9
X penup
X   dc.b  -5,2
X   dc.b  5,2
X endchar
X
X.B
X   dc.b  -11,10
X*   dc.b  -7,-12
X   dc.b  -7,9
X* penup
X   dc.b  -7,-12
X   dc.b  2,-12
X   dc.b  5,-11
X   dc.b  6,-10
X   dc.b  7,-8
X   dc.b  7,-6
X   dc.b  6,-4
X   dc.b  5,-3
X   dc.b  2,-2
X* penup
X   dc.b  -7,-2
X   dc.b  2,-2
X   dc.b  5,-1
X   dc.b  6,0
X   dc.b  7,2
X   dc.b  7,5
X   dc.b  6,7
X   dc.b  5,8
X   dc.b  2,9
X*   dc.b  -7,9
X closepath
X endchar
X
X.C
X   dc.b  -10,11
X   dc.b  8,-7
X   dc.b  7,-9
X   dc.b  5,-11
X   dc.b  3,-12
X   dc.b  -1,-12
X   dc.b  -3,-11
X   dc.b  -5,-9
X   dc.b  -6,-7
X   dc.b  -7,-4
X   dc.b  -7,1
X   dc.b  -6,4
X   dc.b  -5,6
X   dc.b  -3,8
X   dc.b  -1,9
X   dc.b  3,9
X   dc.b  5,8
X   dc.b  7,6
X   dc.b  8,4
X endchar
X
X.D
X   dc.b  -11,10
X   dc.b  -7,-12
X   dc.b  -7,9
X penup
X   dc.b  -7,-12
X   dc.b  0,-12
X   dc.b  3,-11
X   dc.b  5,-9
X   dc.b  6,-7
X   dc.b  7,-4
X   dc.b  7,1
X   dc.b  6,4
X   dc.b  5,6
X   dc.b  3,8
X   dc.b  0,9
X   dc.b  -7,9
X endchar
X
X.E
X   dc.b  -10,9
X   dc.b  -6,-12
X   dc.b  -6,9
X penup
X   dc.b  -6,-12
X   dc.b  7,-12
X penup
X   dc.b  -6,-2
X   dc.b  2,-2
X penup
X   dc.b  -6,9
X   dc.b  7,9
X endchar
X
X.F
X   dc.b  -10,8
X   dc.b  -6,-12
X   dc.b  -6,9
X penup
X   dc.b  -6,-12
X   dc.b  7,-12
X penup
X   dc.b  -6,-2
X   dc.b  2,-2
X endchar
X
X.G
X   dc.b  -10,11
X   dc.b  8,-7
X   dc.b  7,-9
X   dc.b  5,-11
X   dc.b  3,-12
X   dc.b  -1,-12
X   dc.b  -3,-11
X   dc.b  -5,-9
X   dc.b  -6,-7
X   dc.b  -7,-4
X   dc.b  -7,1
X   dc.b  -6,4
X   dc.b  -5,6
X   dc.b  -3,8
X   dc.b  -1,9
X   dc.b  3,9
X   dc.b  5,8
X   dc.b  7,6
X   dc.b  8,4
X   dc.b  8,1
X penup
X   dc.b  3,1
X   dc.b  8,1
X endchar
X
X.H
X   dc.b  -11,11
X   dc.b  -7,-12
X   dc.b  -7,9
X penup
X   dc.b  7,-12
X   dc.b  7,9
X penup
X   dc.b  -7,-2
X   dc.b  7,-2
X endchar
X
X.I
X   dc.b  -4,4
X   dc.b  0,-12
X   dc.b  0,9
X endchar
X
X.J
X   dc.b  -8,8
X   dc.b  4,-12
X   dc.b  4,4
X   dc.b  3,7
X   dc.b  2,8
X   dc.b  0,9
X   dc.b  -2,9
X   dc.b  -4,8
X   dc.b  -5,7
X   dc.b  -6,4
X   dc.b  -6,2
X endchar
X
X.K
X   dc.b  -11,10
X   dc.b  -7,-12
X   dc.b  -7,9
X penup
X   dc.b  7,-12
X   dc.b  -7,2
X penup
X   dc.b  -2,-3
X   dc.b  7,9
X endchar
X
X.L
X   dc.b  -10,7
X   dc.b  -6,-12
X   dc.b  -6,9
X penup
X   dc.b  -6,9
X   dc.b  6,9
X endchar
X
X.M
X   dc.b  -12,12
X   dc.b  -8,-12
X   dc.b  -8,9
X penup
X   dc.b  -8,-12
X   dc.b  0,9
X penup
X   dc.b  8,-12
X   dc.b  0,9
X penup
X   dc.b  8,-12
X   dc.b  8,9
X endchar
X
X.N
X   dc.b  -11,11
X   dc.b  -7,-12
X   dc.b  -7,9
X penup
X   dc.b  -7,-12
X   dc.b  7,9
X penup
X   dc.b  7,-12
X   dc.b  7,9
X endchar
X
X.O
X   dc.b  -11,11
X   dc.b  -2,-12
X   dc.b  -4,-11
X   dc.b  -6,-9
X   dc.b  -7,-7
X   dc.b  -8,-4
X   dc.b  -8,1
X   dc.b  -7,4
X   dc.b  -6,6
X   dc.b  -4,8
X   dc.b  -2,9
X   dc.b  2,9
X   dc.b  4,8
X   dc.b  6,6
X   dc.b  7,4
X   dc.b  8,1
X   dc.b  8,-4
X   dc.b  7,-7
X   dc.b  6,-9
X   dc.b  4,-11
X   dc.b  2,-12
X*   dc.b  -2,-12
X closepath
X endchar
X
X.P
X   dc.b  -11,10
X*   dc.b  -7,-12
X   dc.b  -7,9
X* penup
X   dc.b  -7,-12
X   dc.b  2,-12
X   dc.b  5,-11
X   dc.b  6,-10
X   dc.b  7,-8
X   dc.b  7,-5
X   dc.b  6,-3
X   dc.b  5,-2
X   dc.b  2,-1
X   dc.b  -7,-1
X endchar
X
X.Q
X   dc.b  -11,11
X   dc.b  -2,-12
X   dc.b  -4,-11
X   dc.b  -6,-9
X   dc.b  -7,-7
X   dc.b  -8,-4
X   dc.b  -8,1
X   dc.b  -7,4
X   dc.b  -6,6
X   dc.b  -4,8
X   dc.b  -2,9
X   dc.b  2,9
X   dc.b  4,8
X   dc.b  6,6
X   dc.b  7,4
X   dc.b  8,1
X   dc.b  8,-4
X   dc.b  7,-7
X   dc.b  6,-9
X   dc.b  4,-11
X   dc.b  2,-12
X*  dc.b  -2,-12
X closepath
X penup
X   dc.b  1,5
X   dc.b  7,11
X endchar
X
X.R
X   dc.b  -11,10
X   dc.b  -7,-12
X   dc.b  -7,9
X penup
X   dc.b  -7,-12
X   dc.b  2,-12
X   dc.b  5,-11
X   dc.b  6,-10
X   dc.b  7,-8
X   dc.b  7,-6
X   dc.b  6,-4
X   dc.b  5,-3
X   dc.b  2,-2
X   dc.b  -7,-2
X penup
X   dc.b  0,-2
X   dc.b  7,9
X endchar
X
X.S
X   dc.b  -10,10
X   dc.b  7,-9
X   dc.b  5,-11
X   dc.b  2,-12
X   dc.b  -2,-12
X   dc.b  -5,-11
X   dc.b  -7,-9
X   dc.b  -7,-7
X   dc.b  -6,-5
X   dc.b  -5,-4
X   dc.b  -3,-3
X   dc.b  3,-1
X   dc.b  5,0
X   dc.b  6,1
X   dc.b  7,3
X   dc.b  7,6
X   dc.b  5,8
X   dc.b  2,9
X   dc.b  -2,9
X   dc.b  -5,8
X   dc.b  -7,6
X endchar
X
X.T
X   dc.b  -8,8
X   dc.b  0,-12
X   dc.b  0,9
X penup
X   dc.b  -7,-12
X   dc.b  7,-12
X endchar
X
X.U
X   dc.b  -11,11
X   dc.b  -7,-12
X   dc.b  -7,3
X   dc.b  -6,6
X   dc.b  -4,8
X   dc.b  -1,9
X   dc.b  1,9
X   dc.b  4,8
X   dc.b  6,6
X   dc.b  7,3
X   dc.b  7,-12
X endchar
X
X.V
X   dc.b  -9,9
X   dc.b  -8,-12
X   dc.b  0,9
X penup
X   dc.b  8,-12
X   dc.b  0,9
X endchar
X
X.W
X   dc.b  -12,12
X   dc.b  -10,-12
X   dc.b  -5,9
X penup
X   dc.b  0,-12
X   dc.b  -5,9
X penup
X   dc.b  0,-12
X   dc.b  5,9
X penup
X   dc.b  10,-12
X   dc.b  5,9
X endchar
X
X.X
X   dc.b  -10,10
X   dc.b  -7,-12
X   dc.b  7,9
X penup
X   dc.b  7,-12
X   dc.b  -7,9
X endchar
X
X.Y
X   dc.b  -9,9
X   dc.b  -8,-12
X   dc.b  0,-2
X   dc.b  0,9
X penup
X   dc.b  8,-12
X   dc.b  0,-2
X endchar
X
X.Z
X   dc.b  -10,10
X   dc.b  7,-12
X   dc.b  -7,9
X penup
X   dc.b  -7,-12
X   dc.b  7,-12
X penup
X   dc.b  -7,9
X   dc.b  7,9
X endchar
X
X
X.h5B
X   dc.b  -7,7
X   dc.b  -3,-12
X   dc.b  -3,16
X penup
X   dc.b  -3,-12
X   dc.b  4,-12
X penup
X   dc.b  -3,16
X   dc.b  4,16
X endchar
X
X.h5C
X   dc.b  -11,11
X   dc.b  -9,-12
X   dc.b  9,16
X endchar
X
X.h5D
X   dc.b  -7,7
X   dc.b  3,-12
X   dc.b  3,16
X penup
X   dc.b  -4,-12
X   dc.b  3,-12
X penup
X   dc.b  -4,16
X   dc.b  3,16
X endchar
X
X.h5E
X   dc.b  -8,8
X   dc.b  -2,-6
X   dc.b  0,-9
X   dc.b  2,-6
X penup
X   dc.b  -5,-3
X   dc.b  0,-8
X   dc.b  5,-3
X penup
X   dc.b  0,-8
X   dc.b  0,9
X endchar
X
X.h5F
X   dc.b  -13,13
X   dc.b  -9,16
X   dc.b  9,16
X endchar
X
X.h60
X   dc.b  -4,4
X   dc.b  -3,-12
X   dc.b  0,-5
X endchar
X
X.a
X   dc.b  -9,10
X   dc.b  6,-5
X   dc.b  6,9
X penup
X   dc.b  6,-2
X   dc.b  4,-4
X   dc.b  2,-5
X   dc.b  -1,-5
X   dc.b  -3,-4
X   dc.b  -5,-2
X   dc.b  -6,1
X   dc.b  -6,3
X   dc.b  -5,6
X   dc.b  -3,8
X   dc.b  -1,9
X   dc.b  2,9
X   dc.b  4,8
X   dc.b  6,6
X endchar
X
X.b
X   dc.b  -10,9
X   dc.b  -6,-12
X   dc.b  -6,9
X penup
X   dc.b  -6,-2
X   dc.b  -4,-4
X   dc.b  -2,-5
X   dc.b  1,-5
X   dc.b  3,-4
X   dc.b  5,-2
X   dc.b  6,1
X   dc.b  6,3
X   dc.b  5,6
X   dc.b  3,8
X   dc.b  1,9
X   dc.b  -2,9
X   dc.b  -4,8
X   dc.b  -6,6
X endchar
X
X.c
X   dc.b  -9,9
X   dc.b  6,-2
X   dc.b  4,-4
X   dc.b  2,-5
X   dc.b  -1,-5
X   dc.b  -3,-4
X   dc.b  -5,-2
X   dc.b  -6,1
X   dc.b  -6,3
X   dc.b  -5,6
X   dc.b  -3,8
X   dc.b  -1,9
X   dc.b  2,9
X   dc.b  4,8
X   dc.b  6,6
X endchar
X
X.d
X   dc.b  -9,10
X   dc.b  6,-12
X   dc.b  6,9
X penup
X   dc.b  6,-2
X   dc.b  4,-4
X   dc.b  2,-5
X   dc.b  -1,-5
X   dc.b  -3,-4
X   dc.b  -5,-2
X   dc.b  -6,1
X   dc.b  -6,3
X   dc.b  -5,6
X   dc.b  -3,8
X   dc.b  -1,9
X   dc.b  2,9
X   dc.b  4,8
X   dc.b  6,6
X endchar
X
X.e
X   dc.b  -9,9
X   dc.b  -6,1
X   dc.b  6,1
X   dc.b  6,-1
X   dc.b  5,-3
X   dc.b  4,-4
X   dc.b  2,-5
X   dc.b  -1,-5
X   dc.b  -3,-4
X   dc.b  -5,-2
X   dc.b  -6,1
X   dc.b  -6,3
X   dc.b  -5,6
X   dc.b  -3,8
X   dc.b  -1,9
X   dc.b  2,9
X   dc.b  4,8
X   dc.b  6,6
X endchar
X
X.f
X   dc.b  -5,7
X   dc.b  5,-12
X   dc.b  3,-12
X   dc.b  1,-11
X   dc.b  0,-8
X   dc.b  0,9
X penup
X   dc.b  -3,-5
X   dc.b  4,-5
X endchar
X
X.g
X   dc.b  -9,10
X   dc.b  6,-5
X   dc.b  6,11
X   dc.b  5,14
X   dc.b  4,15
X   dc.b  2,16
X   dc.b  -1,16
X   dc.b  -3,15
X penup
X   dc.b  6,-2
X   dc.b  4,-4
X   dc.b  2,-5
X   dc.b  -1,-5
X   dc.b  -3,-4
X   dc.b  -5,-2
X   dc.b  -6,1
X   dc.b  -6,3
X   dc.b  -5,6
X   dc.b  -3,8
X   dc.b  -1,9
X   dc.b  2,9
X   dc.b  4,8
X   dc.b  6,6
X endchar
X
X.h
X   dc.b  -9,10
X   dc.b  -5,-12
X   dc.b  -5,9
X penup
X   dc.b  -5,-1
X   dc.b  -2,-4
X   dc.b  0,-5
X   dc.b  3,-5
X   dc.b  5,-4
X   dc.b  6,-1
X   dc.b  6,9
X endchar
X
X.i
X   dc.b  -4,4
X   dc.b  -1,-12
X   dc.b  0,-11
X   dc.b  1,-12
X   dc.b  0,-13
X   dc.b  -1,-12
X penup
X   dc.b  0,-5
X   dc.b  0,9
X endchar
X
X.j
X   dc.b  -5,5
X   dc.b  0,-12
X   dc.b  1,-11
X   dc.b  2,-12
X   dc.b  1,-13
X   dc.b  0,-12
X penup
X   dc.b  1,-5
X   dc.b  1,12
X   dc.b  0,15
X   dc.b  -2,16
X   dc.b  -4,16
X endchar
X
X.k
X   dc.b  -9,8
X   dc.b  -5,-12
X   dc.b  -5,9
X penup
X   dc.b  5,-5
X   dc.b  -5,5
X penup
X   dc.b  -1,1
X   dc.b  6,9
X endchar
X
X.l
X   dc.b  -4,4
X   dc.b  0,-12
X   dc.b  0,9
X endchar
X
X.m
X   dc.b  -15,15
X   dc.b  -11,-5
X   dc.b  -11,9
X penup
X   dc.b  -11,-1
X   dc.b  -8,-4
X   dc.b  -6,-5
X   dc.b  -3,-5
X   dc.b  -1,-4
X   dc.b  0,-1
X   dc.b  0,9
X penup
X   dc.b  0,-1
X   dc.b  3,-4
X   dc.b  5,-5
X   dc.b  8,-5
X   dc.b  10,-4
X   dc.b  11,-1
X   dc.b  11,9
X endchar
X
X.n
X   dc.b  -9,10
X   dc.b  -5,-5
X   dc.b  -5,9
X penup
X   dc.b  -5,-1
X   dc.b  -2,-4
X   dc.b  0,-5
X   dc.b  3,-5
X   dc.b  5,-4
X   dc.b  6,-1
X   dc.b  6,9
X endchar
X
X.o
X   dc.b  -9,10
X   dc.b  -1,-5
X   dc.b  -3,-4
X   dc.b  -5,-2
X   dc.b  -6,1
X   dc.b  -6,3
X   dc.b  -5,6
X   dc.b  -3,8
X   dc.b  -1,9
X   dc.b  2,9
X   dc.b  4,8
X   dc.b  6,6
X   dc.b  7,3
X   dc.b  7,1
X   dc.b  6,-2
X   dc.b  4,-4
X   dc.b  2,-5
X   dc.b  -1,-5
X endchar
X
X.p
X   dc.b  -10,9
X   dc.b  -6,-5
X   dc.b  -6,16
X penup
X   dc.b  -6,-2
X   dc.b  -4,-4
X   dc.b  -2,-5
X   dc.b  1,-5
X   dc.b  3,-4
X   dc.b  5,-2
X   dc.b  6,1
X   dc.b  6,3
X   dc.b  5,6
X   dc.b  3,8
X   dc.b  1,9
X   dc.b  -2,9
X   dc.b  -4,8
X   dc.b  -6,6
X endchar
X
X.q
X   dc.b  -9,10
X   dc.b  6,-5
X   dc.b  6,16
X penup
X   dc.b  6,-2
X   dc.b  4,-4
X   dc.b  2,-5
X   dc.b  -1,-5
X   dc.b  -3,-4
X   dc.b  -5,-2
X   dc.b  -6,1
X   dc.b  -6,3
X   dc.b  -5,6
X   dc.b  -3,8
X   dc.b  -1,9
X   dc.b  2,9
X   dc.b  4,8
X   dc.b  6,6
X endchar
X
X.r
X   dc.b  -7,6
X   dc.b  -3,-5
X   dc.b  -3,9
X penup
X   dc.b  -3,1
X   dc.b  -2,-2
X   dc.b  0,-4
X   dc.b  2,-5
X   dc.b  5,-5
X endchar
X
X.s
X   dc.b  -8,9
X   dc.b  6,-2
X   dc.b  5,-4
X   dc.b  2,-5
X   dc.b  -1,-5
X   dc.b  -4,-4
X   dc.b  -5,-2
X   dc.b  -4,0
X   dc.b  -2,1
X   dc.b  3,2
X   dc.b  5,3
X   dc.b  6,5
X   dc.b  6,6
X   dc.b  5,8
X   dc.b  2,9
X   dc.b  -1,9
X   dc.b  -4,8
X   dc.b  -5,6
X endchar
X
X.t
X   dc.b  -5,7
X   dc.b  0,-12
X   dc.b  0,5
X   dc.b  1,8
X   dc.b  3,9
X   dc.b  5,9
X penup
X   dc.b  -3,-5
X   dc.b  4,-5
X endchar
X
X.u
X   dc.b  -9,10
X   dc.b  -5,-5
X   dc.b  -5,5
X   dc.b  -4,8
X   dc.b  -2,9
X   dc.b  1,9
X   dc.b  3,8
X   dc.b  6,5
X penup
X   dc.b  6,-5
X   dc.b  6,9
X endchar
X
X.v
X   dc.b  -8,8
X   dc.b  -6,-5
X   dc.b  0,9
X penup
X   dc.b  6,-5
X   dc.b  0,9
X endchar
X
X.w
X   dc.b  -11,11
X   dc.b  -8,-5
X   dc.b  -4,9
X penup
X   dc.b  0,-5
X   dc.b  -4,9
X penup
X   dc.b  0,-5
X   dc.b  4,9
X penup
X   dc.b  8,-5
X   dc.b  4,9
X endchar
X
X.x
X   dc.b  -8,9
X   dc.b  -5,-5
X   dc.b  6,9
X penup
X   dc.b  6,-5
X   dc.b  -5,9
X endchar
X
X.y
X   dc.b  -8,8
X   dc.b  -6,-5
X   dc.b  0,9
X penup
X   dc.b  6,-5
X   dc.b  0,9
X   dc.b  -2,13
X   dc.b  -4,15
X   dc.b  -6,16
X   dc.b  -7,16
X endchar
X
X.z
X   dc.b  -8,9
X   dc.b  6,-5
X   dc.b  -5,9
X penup
X   dc.b  -5,-5
X   dc.b  6,-5
X penup
X   dc.b  -5,9
X   dc.b  6,9
X endchar
X
X
X.h7B
X   dc.b  -7,7
X   dc.b  2,-12
X   dc.b  0,-11
X   dc.b  -1,-10
X   dc.b  -2,-9
X   dc.b  -2,-7
X   dc.b  -1,-6
X   dc.b  0,-5
X   dc.b  1,-3
X   dc.b  1,-1
X   dc.b  -1,1
X  penup
X   dc.b  0,-11
X   dc.b  -1,-9
X   dc.b  -1,-8
X   dc.b  0,-7
X   dc.b  1,-6
X   dc.b  2,-4
X   dc.b  2,-2
X   dc.b  1,0
X   dc.b  -3,2
X   dc.b  1,4
X   dc.b  2,6
X   dc.b  2,8
X   dc.b  1,10
X   dc.b  0,11
X   dc.b  -1,12
X   dc.b  -1,13
X   dc.b  0,15
X penup
X   dc.b  -1,3
X   dc.b  1,5
X   dc.b  1,7
X   dc.b  0,9
X   dc.b  -1,10
X   dc.b  -2,11
X   dc.b  -2,13
X   dc.b  -1,14
X   dc.b  0,15
X   dc.b  2,16
X endchar
X
X.h7C
X   dc.b  -4,4
X   dc.b  0,-12
X   dc.b  0,16
X endchar
X
X.h7D
X   dc.b  -7,7
X   dc.b  -2,-12
X   dc.b  0,-11
X   dc.b  1,-10
X   dc.b  2,-9
X   dc.b  2,-7
X   dc.b  1,-6
X   dc.b  0,-5
X   dc.b  -1,-3
X   dc.b  -1,-1
X   dc.b  1,1
X penup
X   dc.b  0,-11
X   dc.b  1,-9
X   dc.b  1,-8
X   dc.b  0,-7
X   dc.b  -1,-6
X   dc.b  -2,-4
X   dc.b  -2,-2
X   dc.b  -1,0
X   dc.b  3,2
X   dc.b  -1,4
X   dc.b  -2,6
X   dc.b  -2,8
X   dc.b  -1,10
X   dc.b  0,11
X   dc.b  1,12
X   dc.b  1,13
X   dc.b  0,15
X penup
X   dc.b  1,3
X   dc.b  -1,5
X   dc.b  -1,7
X   dc.b  0,9
X   dc.b  1,10
X   dc.b  2,11
X   dc.b  2,13
X   dc.b  1,14
X   dc.b  0,15
X   dc.b  -2,16
X endchar
X
X.h7E
X   dc.b  -12,12
X   dc.b  -9,3
X   dc.b  -9,1
X   dc.b  -8,-2
X   dc.b  -6,-3
X   dc.b  -4,-3
X   dc.b  -2,-2
X   dc.b  2,1
X   dc.b  4,2
X   dc.b  6,2
X   dc.b  8,1
X   dc.b  9,-1
X penup
X   dc.b  -9,1
X   dc.b  -8,-1
X   dc.b  -6,-2
X   dc.b  -4,-2
X   dc.b  -2,-1
X   dc.b  2,2
X   dc.b  4,3
X   dc.b  6,3
X   dc.b  8,2
X   dc.b  9,-1
X   dc.b  9,-3
X endchar
X
X.h7F
X   dc.b  -8,8
X   dc.b  0,-12
X   dc.b  -1,-10
X   dc.b  0,-8
X   dc.b  1,-10
X   dc.b  0,-12
X penup
X   dc.b  0,-12
X   dc.b  0,16
X penup
X   dc.b  0,-1
X   dc.b  -1,2
X   dc.b  0,16
X   dc.b  1,2
X   dc.b  0,-1
X penup
X   dc.b  -6,-5
X   dc.b  6,-5
X penup
X   dc.b  2,-5
X   dc.b  4,-4
X   dc.b  6,-5
X   dc.b  4,-6
X   dc.b  2,-5
X endchar
X
X
X   end
X
X
\Rogue\Monster\
else
  echo "will not over write ./simplex.chr"
fi
if [ `wc -c ./simplex.chr | awk '{printf $1}'` -ne 20594 ]
then
echo `wc -c ./simplex.chr | awk '{print "Got " $1 ", Expected " 20594}'`
fi
if `test ! -s ./tletters`
then
echo "writing ./tletters"
sed 's/^X//' > ./tletters << '\Rogue\Monster\'
X
Xsave
X
X2 pencolor    1 penmode
X
X/simplex findfont 12 scalefont setfont
X
X/char (x) def
X
X/tshow { false charpath stroke } def
X
X/caps {
X   65 1 65 25 add  % for A to Z
X   { char exch 0 exch put
X     char tshow } for
X   } def
X
X/small {
X   97 1 97 25 add
X   { char exch 0 exch put
X     char tshow } for
X   } def
X
X 3 setlinewidth
X
X50 300 moveto  small
X50 250 moveto  caps
X
X/simplex findfont  20 scalefont setfont
X
X50 200 moveto  small
X50 150 moveto  caps
X
X
Xrestore
X
\Rogue\Monster\
else
  echo "will not over write ./tletters"
fi
if [ `wc -c ./tletters | awk '{printf $1}'` -ne 460 ]
then
echo `wc -c ./tletters | awk '{print "Got " $1 ", Expected " 460}'`
fi
echo "Finished archive 1 of 3"
# if you want to concatenate archives, remove anything after this line
exit