lee@uhccux.UUCP (Greg Lee) (10/10/87)
#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of archive 2 (of 2)."
# Contents: rmath.a
# Wrapped by lee@uhccux on Sat Oct 10 05:09:51 1987
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f rmath.a -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"rmath.a\"
else
echo shar: Extracting \"rmath.a\" \(25500 characters\)
sed "s/^X//" >rmath.a <<'END_OF_rmath.a'
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
END_OF_rmath.a
if test 25500 -ne `wc -c <rmath.a`; then
echo shar: \"rmath.a\" unpacked with wrong size!
fi
# end of overwriting check
fi
echo shar: End of archive 2 \(of 2\).
cp /dev/null ark2isdone
MISSING=""
for I in 1 2 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked both archives.
rm -f ark[1-9]isdone
else
echo You still need to unpack the following archives:
echo " " ${MISSING}
fi
## End of shell archive.
exit 0