antoine-source/appleworksgs/Pict/Src/misc.aii

1 line
3.3 KiB
Plaintext
Raw Normal View History

2023-03-04 02:45:20 +00:00
LOAD 'Macros.dump' INCLUDE 'Pict.equ' INCLUDE 'Driver.equ' IMPORT Q_printsquare IMPORT Q_square **************************************************************** * * Q_ManglePoint(srcpt:l,rectptr:l,what:w,prrec:l):dstpt:l * Flip/rotate a Q_Point around the Q_center of a rectangle. * srcpt and dstpt are values, not pointers. Everything * is done according to the print record prrec. * **************************************************************** Q_ManglePoint PROC EXPORT ;Using Q_PictData input srcpt:l,rectptr:l,who:w,prrec:l output dstpt:l local middle:l,prptr:l begin +b movelong [rectptr],myrect movelong [rectptr]:#4,myrect+4 cmpl prrec,#0 beq nomap movelong [prrec],prptr movelong [prptr]:#4,Q_printsquare+4 pushlong #myrect pushlong #Q_printsquare pushlong #Q_square _MapRect pushlong !srcpt pushlong #Q_printsquare pushlong #Q_square _MapPt nomap addword myrect,myrect+4,middle addword myrect+2,myrect+6,middle+2 jtl trashPt,who cmpl prrec,#0 beq nomap2 pushlong !srcpt pushlong #Q_square pushlong #Q_printsquare _MapPt nomap2 movelong srcpt,dstpt return trashPt DC.L h_pt DC.L v_pt DC.L r_pt DC.L l_pt *--------------------------------------------------------------* h_pt lda middle+2 ; H-flip the Q_Point around middle.x sec sbc srcpt+2 sta srcpt+2 rtl *--------------------------------------------------------------* v_pt lda middle ; V-flip the Q_Point around middle.y sec sbc srcpt sta srcpt rtl *--------------------------------------------------------------* ; ; NOTE: The reason behind adding the last bit of either middle or ; middle+2 in the calculations below is to prevent the Q_Point ; from creeping up and/or to the left when (middle)+(middle+2) ; is odd. Trust me. It works. ; -- jge, 1/20/88 ; r_pt lda middle+2 ; R-rotate the Q_Point around middle and #1 ; <adjust for creep> clc adc middle+2 ; pt.x <= -(pt.y - middle.y) + middle.x adc middle sta dstpt ; (divide middle by 2, preserving asl dstpt ; the sign) ror a ; sec sbc srcpt tax ; D_Save it here... lda middle ; pt.y <= pt.x - middle.x + middle.y and #1 ; <adjust for creep> clc adc middle sec sbc middle+2 sta dstpt ; (divide middle by 2, preserving asl dstpt ; the sign) ror a ; clc adc srcpt+2 sta srcpt stx srcpt+2 ; ...and store it here. r_ptdone rtl *--------------------------------------------------------------* l_pt lda middle ; L-rotate the Q_Point around middle and #1 ; <adjust for creep> clc adc middle ; pt.y <= -(pt.x - middle.x) + middle.y adc middle+2 sta dstpt ; (divide middle by 2, preserving asl dstpt ; the sign) ror a ; sec sbc srcpt+2 tay ; D_Save it here... lda middle+2 ; pt.x <= pt.y - middle.y + middle.x and #1 ; <adjust for creep> clc adc middle+2 sec sbc middle sta dstpt ; (divide middle by 2, preserving asl dstpt ; the sign) ror a ; clc adc srcpt sta srcpt+2 sty srcpt ; ...and store it here. l_ptdone rtl *--------------------------------------------------------------* myrect DS.B 8 ENDP END