1 * (PL$MV) REV 1.0 INCREMENTAL PLOTTER ROUTINES
5 * PL$MV (PL$MV,PL$RST,PL$LN,PL$X,PL$Y,PL$RMR)
7 * PLOTTER MOVEMENT ROUTINES
11 * 1.0 (2007-05-28) - INITIAL REVISION
13 * 1.1 (2007-11-08) - ADDED INTELLIGENT LINE DRAWING ROUTINE
15 * 1.2 (2007-12-15) - ADDED PL$X and PL$Y POSITION EXPORTS
16 * ADDED PL$RMR TRANSLATIION ROUTINE
18 * 1.3 (2007-12-19) - ADDED TRANSFORMATION MATRIX SUPPORT TO PL$MV.
19 * MATRIX PL$MAT IS NOW APPLIED BEFORE
20 * ANY MOVE INSTRUCTION.
30 * PROVIDE DRAWING AND COORDINATE TRANSFORMATION
31 * ROUTINES FOR INCREMENTAL PLOTTERS
42 * CALL PL$RST - SET VIRTUAL PLOT POSITION TO ZERO
44 * CALL PL$MV - MOVE TO POINT SPECIFIED
49 * CALL PL$LN - DRAW LINE AND LEAVE PEN DOWN
56 * CALL PL$RMR - MOVE ORIGIN RELATIVELY
61 * CALL PL$SCL - SCALE TRANSFORMATION
62 * DAC SCALE SCALE FACTOR, FLOAT
65 * CALL PL$IDN - RESET TRANSFORMATION MATRIX
67 ********************************************************************************
89 REL THIS IS A RELOCATABLE OBJECT
93 ********************************************************************************
95 **** PL$MVR - MOVE PEN RELATIVELY
123 **** PL$INI - GRAPHICS INITIALISATION
125 * THIS ROUTINE SETS THE HARDWARE ORIGIN TO THE CURRENT PlOTTER POSITION.
126 * IT ALSO INITIALISES THE TRANSFORMATION.
128 ****************************************
142 **** PL$PUS - PUSH GRAPHIC CONTEXT ONTO THE STACK
148 CALL S$PUSM PUSH MEMORY ROUTINE
151 DEC 12 12 WORDS OF DATA.
155 ********************************************************************************
158 **** PL$POP - POP GRAPHIC CONTEXT FROM THE STACK
164 CALL S$POPM POP MEMORY ROUTINE
167 DEC 12 12 WORDS OF DATA.
171 * *******************************************************************************
174 **** PL$LN - DRAW A LINE
176 LINE DAC 0 DRAW A LINE FROM NEAREST STARTING POINT
188 IRS LINE TALLY RETURN ADDRESS
189 IRS LINE AGAIN FOR FORTRAN IV COMPATIBILITY
191 CALL T$APII APPLY MATRIX
199 CALL T$APII APPLY MATRIX
210 SPL SKIP IF SIGN PLUS
211 TCA TWO'S COMPLEMENT IF NEEDED
222 SPL SKIP IF SIGN PLUS
223 TCA TWO'S COMPLEMENT IF NEEDED
231 JMP D2BG D2 IS BIGGER!
234 D1BG LDA X2 DIFFERENCE 1 IS BIGGER, SO START AT POINT X2,Y2
244 D2BG LDA X1 DIFFERENCE 2 IS BIGGER, SO START AT POINT X1,Y1
253 WOKI LDA X TEST IF STARTING POINT IST CURRENT POSITION
265 MV1 CALL PL$PU MOVE TO THE STARTING POSITION
272 NM1 CALL PL$PD WE ARE AT BEGINNING OF LINE
278 JMP* LINE END OF THE LINE :-)
281 ********************************************************************************
283 **** MAKE CURRENT X AND Y THE ORIGIN
287 **** FIRST TRANSLATE THE CURRENT USER POSITION:
300 ********************************************************************************
303 **** PL$MV - BASIC MOVE ROUTINE
307 LDX MOVE GET PARAMETERS
316 STA MOVE CORRECT RETURN ADDRESS
318 CALL T$APII APPLY TRANSFORMATION MATRIX TO POSITION
326 JST RMOV CALL INTO REAL MOVE SUBROUTINE
329 ****************************************
331 RMOV DAC ** REAL MOVE SUBROUTINE
344 STA DX NOW, DX IS POSITIVE!
365 STA DY NOW, DY IS POSITIVE!
378 JMP XGTY DX GREATER DY
379 YGTX NOP DY GREATER OR EQUAL DX
403 ****************************************
405 * NOW ALL STEP ROUTINES, DL0, DS0, DL0, DS0 ETC.
408 GTE LDA DL0 LONG DISTANCE
410 STA ERR INITIALIZE ERROR COUNTER
415 LOOP LDA DL LONG DISTANCE
417 JMP FNSH END OF WORK - HOPE SO....
419 SUB =1 DECREMENT LONG DISTANCE
422 LDA ERR ERROR COUNTER
425 SMI SKIP IF NOT OVERFLOWN (MINUS)
426 JMP NDIA NO DIAG STEP
435 JST* STPD DO DIAGONAL STEP
438 *** NO DIAGONAL STEP TO DO
440 NDIA JST* STPL DO LONG DIRECTION STEP
449 JMP* RMOV END OF THE ROUTINE
452 ********************************************************************************
468 ********************************************************************************
471 **** ROTATE - RADIANT
484 ********************************************************************************
487 **** RLUP - UPDATE LATENT POSITION TO REAL POSITION
492 JMP* RLUP NOTHING TO DO
502 ********************************************************************************
505 **** ROTATE - INTEGER DEGREES
518 ********************************************************************************
521 **** SCALE - INTEGER PERCENTS
534 ********************************************************************************
536 *** MOVE COORDINATE SYSTEM RELATIVELY
556 **********************
560 X DEC 0 HARDWARE VIEW PEN POSITION, X VALUE
561 Y DEC 0 HARDWARE VIEW PEN POSITION, Y VALUE
562 XN DEC 0 NEW PEN POSITION, X VALUE
563 YN DEC 0 NEW PEN POSITION, Y VALUE
564 DX DEC 0 X DIFFERENCE TO GO
565 DY DEC 0 Y DIFFERENCE TO GO
566 TMPX DEC 0 TEMPORARY X VALUE
567 TMPY DEC 0 TEMPORARY Y VALUE
569 DL0 DEC 0 INITIAL LONG DISTANCE
570 DS0 DEC 0 INITIAL SHORT DISTANCE
571 DL DEC 0 LONG DISTANCE
572 DS DEC 0 SHORT DISTANCE
573 STPL DAC ** ROUTINE TO LONG DISTANCE STEP
574 STPS DAC ** ROUTINE TO SHORT DISTANCE STEP
575 STPD DAC ** ROUTINE TO DIAGONAL STEP
576 ERR DEC 0 ERROR COUNTER
578 STPX DAC ** X STEP ROUTINE
579 STPY DAC ** Y STEP ROUTINE
580 DIYP DAC ** DIAGONAL X-DIR+UP STEP ROUTINE
581 DIYN DAC ** DIAGONAL X-DIR+DOWN STEP ROUTINE
583 X1 DEC 0 LINE START POINT, X
584 Y1 DEC 0 LINE START POINT, Y
585 X2 DEC 0 LINE END POINT, X
586 Y2 DEC 0 LINE END POINT, Y
588 XA DEC 0 REAL FIRST POINT X COORDINATE
589 YA DEC 0 REAL FIRST POINT Y COORDINATE
590 XB DEC 0 REAL SECOND POINT X COORDINATE
591 YB DEC 0 REAL SECOND POINT Y COORDINATE
592 D1 DEC 0 ORTHOGONAL WAY LENGTH FROM CURRENT POS TO P1
593 D2 DEC 0 ORTHOGONAL WAY LENGTH FROM CURRENT POS TO P2
594 RELA DEC 0 FLAG INDICATING THAT RELATIVE POSITIONING HAS OCCURED
596 **** GLUE IN THE MOVEMENT ROUTINES
607 ********************************************************************************
610 **** AFFINE TRASFORMATION DATA AND REST OF GRAPHIC CONTEXT
612 * OLD PROGRAMS DON'T HAVE TO WORRY ABOUT THAT. NEWER PROGRAMS SHOULD.
614 *** HERE THE TRANSFORMATION MATRIX, INITIALLY NO TRANSFORMATION, OLD PROGRAMS
615 *** DON'T HAVE TO CARE ABOUT THAT (HOPE SO)
616 ATRA OCT '040300 A11 (CONSTANT 1.0)
622 OCT '040300 A22 (CONSTANT 1.0)
625 VECT DEC 0 X TRANSLATION
627 XU DEC 0 USER VIEW PEN POSITION, X VALUE
628 YU DEC 0 USER VIEW PEN POSITION, Y VALUE
633 ********************************************************************************