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