mirror of
https://github.com/PDP-10/its.git
synced 2026-02-28 17:29:10 +00:00
823 lines
16 KiB
Plaintext
823 lines
16 KiB
Plaintext
;<DRAW>MOVE.FAI.43, 18-NOV-75 11:42:05, EDIT BY HELLIWELL
|
||
VERSION(MOVE,2)
|
||
;START MOVING
|
||
PBMOV: TRZA TFLG
|
||
PGRAB: TRO TFLG
|
||
TRNE INMOV
|
||
JRST PERRET
|
||
TRZ MD,<LMOVE!>TMOVE
|
||
MOVE T,MODE
|
||
HRRZ T,STRTMV(T)
|
||
JRST (T)
|
||
|
||
TXTMOV: TRNE INMOV
|
||
JRST PERRET
|
||
MD,< TRZ LMOVE >
|
||
TRO TMOVE
|
||
MOVE T,MODE
|
||
HLRZ T,STRTMV(T)
|
||
JRST (T)
|
||
|
||
STRTMV: PERRET,,SMOVE ;SET MODE
|
||
MD,< BMOVET,,BMOVE ;BODY MODE >
|
||
MPC,< PERRET,,BMOVE ;BODY MODE >
|
||
PMOVET,,PMOVE ;POINT MODE
|
||
PERRET,,PERRET ;LINE MODE
|
||
PMOVET,,PMOVE ;TEXT MODE
|
||
PERRET,,PERRET ;ALTER MODE
|
||
PERRET,,PERRET ;MACRO ALTER MODE
|
||
PERRET,,PERRET ;SPECIAL POINTER MODE
|
||
MD,< ETMOVT,,ETMOVE ;BODY TEXT MODE
|
||
PERRET,,PERRET ;BODY TEXT ALTER MODE
|
||
EMOVET,,EDINS2 ;EDIT MODE (MAKE IT SAME AS <BETA>I)
|
||
PERRET,,PERRET ;EDIT INSERT MODE
|
||
ETMOVT,,ETMOVE ;EDIT TEXT MODE
|
||
PERRET,,EPMOVE ;EDIT PIN MODE
|
||
PERRET,,PERRET ;EDIT GET MODE
|
||
PERRET,,PERRET ;EDIT ALTER MODE
|
||
>;MD
|
||
REPEAT NUMODES-(STRTMV-.),<PERRET,,PERRET>
|
||
|
||
DOMOVE: TRZ TFLG
|
||
DOMOVG: MOVEM TT,MDISP
|
||
TRO INMOV
|
||
TRNN TFLG ;DON'T MOVE CURSOR IN GRAB MODE
|
||
PUSHJ P,SETPOS
|
||
MOVEI T,BIGPG
|
||
JRST HYDPOG
|
||
;MOVE POINT
|
||
MPC,<
|
||
DOPMOV: MOVE A,CLOSES ;CALLED FROM $B TO MOVE MIDPOINT
|
||
TRZ MD,<LMOVE!>TMOVE!TFLG!INMOV
|
||
JRST PMOVE1
|
||
>;MPC
|
||
|
||
PMOVE: PUSHJ P,GETCLS
|
||
JRST PERRET
|
||
PMOVE1: FETCH(T,A,PXY)
|
||
FETCHL(TT,A,PBIT)
|
||
TLNE TT,MPC,<CPIN!>ISPIN
|
||
JRST [ TRNN TFLG ;IF NOT GRAB MODE,
|
||
JRST SETPOS ;JUST MOVE CURSOR
|
||
POPJ P,] ;ELSE DO NOTHING
|
||
JSP TT,DOMOVG
|
||
;MOVE SUBR
|
||
MOVE A,CLOSES ;GET POINT POINTER
|
||
MOVE T,CURSE ;GET CURSOR POSITION
|
||
CAMN T,ADDR(A,PXY)
|
||
POPJ P,
|
||
ROUTE,<MPC,<TLZ M,%ROUTE>>;MAKE HIM ROUTE AGAIN
|
||
MPC,< STORE(T,A,PXY)
|
||
FETCH(B,A,PFEED) ;GET FEED THROUGH POINTER(IF ANY)
|
||
FETCHL(TT,A,PBIT)
|
||
TLNE TT,FEEDTH
|
||
STORE(T,B,PXY) ;STORE ALSO IN FEEDTHROUGH
|
||
TRO MCHG
|
||
POPJ P,
|
||
>;MPC
|
||
MD,< TRO MCHG
|
||
;MOVE POINT AND FRIENDS
|
||
;A = POINT
|
||
;T = X,Y
|
||
|
||
PMOVIT: FETCHL(TT,A,PBIT)
|
||
TLNE TT,ISPIN ;BODY PIN?
|
||
POPJ P, ;YES, DOESN'T MOVE
|
||
PMOVRL: MOVE TT,T ;HOLD X,Y
|
||
XOR T,1(A) ;COMPARE WITH OLD X,Y
|
||
JUMPE T,CPOPJ ;LEAVE IF NO CHANGE AT ALL
|
||
MOVEM TT,1(A) ;STORE NEW X,Y
|
||
TRNE T,-1 ;DID Y CHANGE?
|
||
PUSHJ P,PMOVY ;YES
|
||
TLNE T,-1 ;DID X CHANGE?
|
||
PUSHJ P,PMOVX ;YES
|
||
;Here we check to see if a segment leaving this point needs
|
||
; to change sense (HORZ to VERT or VERT to HORZ).
|
||
MOVEI F,3 ;4 CASES (F IS TABLE INDEX)
|
||
PUSH P,A ;SAVE OUR POINT
|
||
HVFLP1: XCT SEGTAB(F) ;GET THE POINTER FOR SEGMENT WE WANT TO CHECK
|
||
JUMPE T,HVFLP2 ;SKIP IT IF NONE
|
||
FETCHL(TT,T,PBIT)
|
||
TLNN TT,ISPIN ;PINS ONLY
|
||
JRST HVFLP2
|
||
FETCH(TT,T,PXY)
|
||
MOVE TTT,(P)
|
||
FETCH(TTT,TTT,PXY) ;GET ORIGINAL POINT'S X,Y
|
||
ADJUST(SUB,TT,TTT) ;GET DELTAS
|
||
PUSH P,TT ;SAVE THEM
|
||
HLRE TTT,TT ;SEPERATE X AND Y
|
||
HRRE TT,TT
|
||
MOVM TTT,TTT ;GET MAGNITUDES ONLY
|
||
MOVM TT,TT
|
||
XCT HVMAG(F) ;SEE IF PAST DIAGONAL
|
||
JRST HVFLP3 ;NO
|
||
POP P,TT ;GET BACK SIGNED DELTAS
|
||
TRNE F,1 ;DO WE WANT X OR Y DELTA
|
||
MOVS TT,TT ;WE WANT Y DELTA
|
||
SETCM TTT,F ;COMPLEMENT LOW ORDER BIT (CHANGE HORZ TO VERT)
|
||
ANDI TTT,1 ;ASSUME POSITIVE
|
||
JUMPGE TT,.+2
|
||
TRO TTT,2 ;WELL IT WAS NEGATIVE
|
||
PUSH P,T ;SAVE THIS POINT ALSO
|
||
XCT HVNEWT(TTT) ;GET POINTER WE WANT TO USE
|
||
JUMPN TT,HVFLP3 ;SKIP IF ALREADY IN USE
|
||
XCT HVNEWA(TTT) ;CHECK BOTH ENDS
|
||
JUMPN TT,HVFLP3 ;MUST BOTH BE FREE
|
||
MOVE TT,-1(P) ;GET ORIGINAL POINT
|
||
XCT HVSTOT(TTT) ;STORE IT IN NEW POSITION
|
||
MOVE TT,(P) ;GET OTHER POINT
|
||
XCT HVSTOA(TTT) ;STORE IT ALSO
|
||
XCT HVCLRA(F) ;CLEAR OLD POINTER
|
||
XCT HVCLRT(F) ;AT BOTH ENDS
|
||
HVFLP3: POP P,(P) ;FIX STACK
|
||
HVFLP2: SOJGE F,HVFLP1
|
||
POP P,A ;FIX STACK
|
||
POPJ P,
|
||
|
||
|
||
SEGTAB: FETCH(T,A,PNU)
|
||
FETCH(T,A,PNR)
|
||
FETCH(T,A,PND)
|
||
FETCH(T,A,PNL)
|
||
|
||
HVMAG: CAMG TTT,TT
|
||
CAMG TT,TTT
|
||
CAMG TTT,TT
|
||
CAMG TT,TTT
|
||
|
||
HVNEWT: FETCH(TT,T,PND)
|
||
FETCH(TT,T,PNL)
|
||
FETCH(TT,T,PNU)
|
||
FETCH(TT,T,PNR)
|
||
|
||
HVNEWA: FETCH(TT,A,PNU)
|
||
FETCH(TT,A,PNR)
|
||
FETCH(TT,A,PND)
|
||
FETCH(TT,A,PNL)
|
||
|
||
HVSTOT: STORE(TT,T,PND)
|
||
STORE(TT,T,PNL)
|
||
STORE(TT,T,PNU)
|
||
STORE(TT,T,PNR)
|
||
|
||
HVSTOA: STORE(TT,A,PNU)
|
||
STORE(TT,A,PNR)
|
||
STORE(TT,A,PND)
|
||
STORE(TT,A,PNL)
|
||
|
||
HVCLRT: CLEAR(T,PND)
|
||
CLEAR(T,PNL)
|
||
CLEAR(T,PNU)
|
||
CLEAR(T,PNR)
|
||
|
||
HVCLRA: CLEAR(A,PNU)
|
||
CLEAR(A,PNR)
|
||
CLEAR(A,PND)
|
||
CLEAR(A,PNL)
|
||
;PMOVX, PMOVY
|
||
;MOVE POINT, AND CHECK FOR LINE FLIPPING OVER
|
||
;Written from viewpoint of moving in Y
|
||
;A = POINT MOVED
|
||
;TT = NEW X,Y
|
||
DEFINE FOO $ (HINST,LOCHW,PND,PNU,PNL,PNR)
|
||
< TRO NEEDCL ;MOVING, MAY NEED NEW CLOSEST
|
||
PUSH P,A
|
||
PUSH P,T
|
||
PUSH P,TT
|
||
FETCH(A,A,PNR) ;MOVE RIGHT POINT UP/DOWN
|
||
MOVE T,TT ;GET NEW Y
|
||
HINST T,1(A) ;OLD X,,NEW Y
|
||
JUMPE A,.+2
|
||
PUSHJ P,PMOVIT ;MOVE THE POINT & FRIENDS
|
||
MOVE A,-2(P)
|
||
FETCH(A,A,PNL) ;MOVE LEFT POINT UP/DOWN
|
||
MOVE T,(P) ;GET NEW Y
|
||
HINST T,1(A) ;OLD X,,NEW Y
|
||
JUMPE A,.+2
|
||
PUSHJ P,PMOVIT ;MOVE THE POINT & FRIENDS
|
||
;Now check for line flipping over
|
||
MOV$LOCHW$0:
|
||
MOVE A,-2(P)
|
||
H$LOCHW$RE T,1(A) ;MY Y
|
||
FETCH(F,A,PNU) ;THE POINT ABOVE
|
||
JUMPE F,MOV$LOCHW$1
|
||
H$LOCHW$RE TT,1(F) ;HIS Y
|
||
CAMG T,TT ;ARE WE NOW ABOVE HIM?
|
||
JRST MOV$LOCHW$1
|
||
FETCH(TT,A,PND) ;TT = THE POINT BELOW US
|
||
FETCH(TTT,F,PNU) ;TTT = THE POINT ABOVE US
|
||
STORE(A,F,PNU) ;WE ARE ABOVE HIM
|
||
STORE(F,A,PND)
|
||
STORE(TT,F,PND) ;HE GETS THE BELOW POINT
|
||
SKIPE TT
|
||
STORE(F,TT,PNU) ;FIXUP REVERSE POINTER
|
||
STORE(TTT,A,PNU) ;WE GET ABOVE POINT
|
||
SKIPE TTT
|
||
STORE(A,TTT,PND)
|
||
JRST MOV$LOCHW$0 ;SEE IF WE'RE ABOVE THE UPPERMOST POINT TOO
|
||
|
||
;Did we move below the point below us
|
||
MOV$LOCHW$1:
|
||
FETCH(F,A,PND)
|
||
JUMPE F,MOV$LOCHW$2
|
||
H$LOCHW$RE TT,1(F) ;HIS Y
|
||
CAML T,TT ;ARE WE BELOW HIM?
|
||
JRST MOV$LOCHW$2
|
||
FETCH(TT,A,PNU) ;TT = THE POINT ABOVE US
|
||
FETCH(TTT,F,PND) ;TTT = THE POINT BELOW US
|
||
STORE(A,F,PND) ;WE ARE BELOW HIM
|
||
STORE(F,A,PNU)
|
||
STORE(TT,F,PNU) ;HE GETS THE ABOVE POINT
|
||
SKIPE TT
|
||
STORE(F,TT,PND) ;FIXUP REVERSE POINTER
|
||
STORE(TTT,A,PND) ;WE GET BELOW POINT
|
||
SKIPE TTT
|
||
STORE(A,TTT,PNU)
|
||
JRST MOV$LOCHW$0 ;SEE IF WE'RE BELOW THE LOWERMOST POINT TOO
|
||
|
||
MOV$LOCHW$2:
|
||
POP P,TT
|
||
POP P,T
|
||
POP P,A
|
||
POPJ P,
|
||
>
|
||
|
||
PMOVY: FOO (HLL,R,PND,PNU,PNL,PNR)
|
||
PMOVX: FOO (HRR,L,PNL,PNR,PND,PNU)
|
||
>;MD
|
||
;MOVE TEXT OFFSET, CPIN OFFSET
|
||
MD,<
|
||
PMOVEL: TRNE INMOV
|
||
JRST PERRET
|
||
TRO LMOVE ;MOVE CPIN OFFSET
|
||
TRZ TMOVE
|
||
>;MD
|
||
PMOVET: PUSHJ P,GETCLS
|
||
JRST PERRET
|
||
FETCH(T,A,PXY)
|
||
MD,< TRNN LMOVE
|
||
JRST PMOVT1
|
||
FETCHL(TT,A,PBIT)
|
||
TLNN TT,CPIN
|
||
JRST PERRET
|
||
TLZ TT,FIXCON ;TURN OFF FIXCON WHEN HE MOVES IT
|
||
STOREL(TT,A,PBIT)
|
||
FETCH(A,A,PLOC)
|
||
JRST PMOVL1
|
||
|
||
PMOVT1: CLRBIT(FIXTXT!FIXRHT,TT,A,PBIT) ;TURN THESE OFF WHEN HE MOVES TEXT OFFSET
|
||
FETCH(A,A,PTXT)
|
||
JUMPE A,PERRET
|
||
PMOVL1: PUSHJ P,TOFSET
|
||
>;MD
|
||
MPC,< FETCH(A,A,PTXT)
|
||
JUMPE A,PERRET
|
||
ADJUST(ADD,T,<1(A)>)
|
||
>;MPC
|
||
JSP TT,DOMOVE
|
||
MOVE A,CLOSES
|
||
FETCH(TT,A,PXY)
|
||
MD,< TRNE LMOVE
|
||
JRST [ FETCH(A,A,PLOC) ;USE CPIN POINTER IF LMOVE
|
||
JRST TOFMOV]
|
||
FETCH(A,A,PTXT)
|
||
PUSHJ P,TOFMOV
|
||
CAMN T,1(A)
|
||
POPJ P,
|
||
MOVE A,CLOSES
|
||
JRST OFFCON ;FIX CON (NOT IF NO MOVE)
|
||
>;MD
|
||
MPC,< FETCH(A,A,PTXT) >
|
||
TOFMOV: MOVE T,CURSE
|
||
TLO T,1
|
||
SUB T,TT
|
||
TLZ T,1
|
||
MD,< HLRE TT,T
|
||
HRRE T,T
|
||
SCALE T
|
||
SCALE TT
|
||
HRL T,TT
|
||
>;MD
|
||
CAMN T,1(A)
|
||
POPJ P,
|
||
EXCH T,1(A)
|
||
TRO MCHG
|
||
POPJ P,
|
||
|
||
MD,<
|
||
TOFSET: HLRE TT,1(A) ;CONSTANT OFFSET
|
||
UNSCAL TT
|
||
MOVE TTT,TT
|
||
HRRE TT,1(A)
|
||
UNSCAL TT
|
||
HRL TT,TTT ;UNSCALED OFFSET
|
||
TLZ TT,1
|
||
ADD T,TT ;CURSOR POS
|
||
TDZ T,[1,,1]
|
||
POPJ P,
|
||
>;MD
|
||
;MOVE BODY AND BODY LOC
|
||
BMOVE: PUSHJ P,GETCLS
|
||
JRST PERRET
|
||
BMOVEP: FETCH(T,A,BXY)
|
||
JSP TT,DOMOVG
|
||
;MOVE SUBR
|
||
MOVE A,CLOSES ;GET POINTER TO CLOSEST BODY
|
||
MOVE T,CURSE ;GET CURRENT CURSOR POSITION
|
||
CAMN T,1(A)
|
||
POPJ P,
|
||
ROUTE,<MPC,<TLZ M,%ROUTE>>;MAKE HIM ROUTE AGAIN
|
||
MOVEM T,1(A) ;SET BODY POS
|
||
TRO MCHG
|
||
JRST BODFIX ;AND FIX PINS
|
||
|
||
MD,<
|
||
BMOVEL: TRNN INMOV
|
||
PUSHJ P,GETCLS
|
||
JRST PERRET
|
||
FETCH(T,A,BXY)
|
||
CLRBIT(FIXLOC,TTT,A,BBIT) ;TURN OFF AUTO POSITION BIT
|
||
FETCH(TT,A,BLOC)
|
||
JUMPE TT,PERRET
|
||
ADJUST(ADD,T,<ADDR(A,BLXY)>)
|
||
PUSH P,T
|
||
MOVE T,A
|
||
PUSHJ P,OFFBLO ;IN CASE CHANGED FIXLOC
|
||
POP P,T
|
||
TLNE M,BLOCS
|
||
TRO MCHG ;REDISPLAY IN CASE WE TURNED THIS LOC ON
|
||
TRO LMOVE
|
||
TRZ TMOVE
|
||
JSP TT,DOMOVE
|
||
;MOVE SUBR
|
||
MOVE A,CLOSES
|
||
MOVE T,CURSE
|
||
ADJUST(SUB,T,<ADDR(A,BXY)>) ;CALC OFFSET FROM BODY
|
||
CAMN T,ADDR(A,BLXY)
|
||
POPJ P,
|
||
STORE(T,A,BLXY)
|
||
TRO MCHG
|
||
POPJ P,
|
||
|
||
BMOVET: TRNN INMOV
|
||
PUSHJ P,GETCLS
|
||
JRST PERRET
|
||
FETCH(T,A,BXY)
|
||
CLRBIT(FIXBLO,TT,A,BBIT)
|
||
FETCH(TT,A,BLOC)
|
||
JUMPE TT,PERRET
|
||
ADJUST(ADD,T,<ADDR(A,BLXY)>)
|
||
TLNE M,BLOCS
|
||
TRO MCHG
|
||
TRZ LMOVE
|
||
TRO TMOVE
|
||
MOVEI A,-1+ADDR(A,BLO)
|
||
PUSHJ P,TOFSET
|
||
JSP TT,DOMOVE
|
||
;MOVE SUBR
|
||
MOVE A,CLOSES
|
||
FETCH(TT,A,BXY)
|
||
ADJUST(ADD,TT,<ADDR(A,BLXY)>)
|
||
MOVEI A,-1+ADDR(A,BLO)
|
||
JRST TOFMOV
|
||
>;MD
|
||
;EDIT MOVES
|
||
MD,<
|
||
EPMOVE: PUSHJ P,GETCLS
|
||
JRST PERRET
|
||
FETCH(T,A,TPXY)
|
||
JSP TT,DOMOVG
|
||
;MOVE SUBR
|
||
MOVE A,CLOSES ;GET POINTER TO CLOSEST PIN
|
||
MOVE T,CURSE ;GET CURRENT CURSOR POSITION
|
||
CAMN T,ADDR(A,TPXY)
|
||
POPJ P,
|
||
STORE(T,A,TPXY)
|
||
TRO MCHG
|
||
SKIPN A,PONPNT
|
||
POPJ P,
|
||
EDPFIX: FETCHL (T,A,PBIT)
|
||
TLNN T,ISPIN
|
||
JRST NOFIX
|
||
FETCH(B,A,BPLOC)
|
||
CAME B,CLOSES ;IS THIS ONE OF OUR PINS
|
||
JRST NOFIX ;NO
|
||
FETCH(E,A,BBODY)
|
||
FETCH(F,E,BORI)
|
||
FETCH(T,B,TPXY)
|
||
PUSHJ P,ORIENT ;ORIENT IT
|
||
ADJUST(ADD,T,<ADDR(E,BXY)>)
|
||
PUSHJ P,PMOVRL ;AND MOVE IT
|
||
NOFIX: FETCH(A,A,PNXT)
|
||
JUMPN A,EDPFIX ;NEXT
|
||
POPJ P,
|
||
|
||
ETMOVE: PUSHJ P,GETCLS
|
||
JRST PERRET
|
||
FETCH(T,A,TXXY)
|
||
MOVE TT,MODE
|
||
CAIE TT,BTXTM
|
||
JRST NBTXT0
|
||
MOVE TT,BTBODY
|
||
PUSH P,F
|
||
FETCH(F,TT,BORI)
|
||
PUSHJ P,ORIENT
|
||
POP P,F
|
||
ADJUST(ADD,T,<ADDR(TT,BXY)>)
|
||
NBTXT0: JSP TT,DOMOVG
|
||
;MOVE SUBR
|
||
MOVE A,CLOSES ;GET POINTER TO CLOSEST TEXT
|
||
MOVE T,CURSE ;GET CURSOR POSITION
|
||
MOVE TT,MODE
|
||
CAIE TT,BTXTM ;BODY TEXT MODE?
|
||
JRST NBTXT1
|
||
MOVE TT,BTBODY
|
||
ADJUST(SUB,T,<ADDR(TT,BXY)>)
|
||
PUSH P,F
|
||
FETCH(F,TT,BORI)
|
||
MOVE F,UNROT(F)
|
||
PUSHJ P,ORIENT
|
||
POP P,F
|
||
NBTXT1: FETCH(TT,A,TXXY)
|
||
TDZ TT,[1,,1]
|
||
TDZ T,[1,,1]
|
||
CAMN T,TT
|
||
POPJ P,
|
||
XOR TT,ADDR(A,TXXY) ;GET STATE OF AUTO OFFSET BIT AND MARK BIT
|
||
IOR T,TT ;AND MOVE TO NEW X,Y
|
||
STORE(T,A,TXXY)
|
||
TRO MCHG
|
||
POPJ P,
|
||
|
||
ETMOVT: PUSHJ P,GETCLS
|
||
JRST PERRET
|
||
FETCH(T,A,TXXY)
|
||
TRZ T,1
|
||
STORE(T,A,TXXY) ;CLEAR AUTO OFFSET BIT
|
||
TLZ T,1 ;AND MARK BIT
|
||
MOVE TT,MODE
|
||
CAIE TT,BTXTM
|
||
JRST NBTXT2
|
||
MOVE TT,BTBODY
|
||
PUSH P,F
|
||
FETCH(F,TT,BORI)
|
||
PUSHJ P,ORIENT
|
||
POP P,F
|
||
ADJUST(ADD,T,<ADDR(TT,BXY)>)
|
||
NBTXT2: MOVEI A,-1+ADDR(A,TXOFF)
|
||
PUSHJ P,TOFSET
|
||
JSP TT,DOMOVE
|
||
;MOVE SUBR
|
||
MOVE A,CLOSES
|
||
FETCH(TT,A,TXXY)
|
||
TDZ TT,[1,,1]
|
||
MOVEI A,-1+ADDR(A,TXOFF)
|
||
MOVE T,MODE
|
||
CAIE T,BTXTM
|
||
JRST TOFMOV
|
||
MOVE TTT,BTBODY
|
||
MOVE T,TT
|
||
PUSH P,F
|
||
FETCH(F,TTT,BORI)
|
||
PUSHJ P,ORIENT
|
||
POP P,F
|
||
ADJUST(ADD,T,<ADDR(TTT,BXY)>)
|
||
MOVE TT,T
|
||
JRST TOFMOV
|
||
|
||
EMOVEL: TRNE INMOV
|
||
JRST PERRET
|
||
MOVE A,CURBOD
|
||
FETCH(T,A,TXY) ;DEFAULT OFFSET
|
||
TRO LMOVE
|
||
TRZ TMOVE
|
||
;MOVE SUBR
|
||
JSP TT,DOMOVE
|
||
MOVE A,CURBOD
|
||
MOVE T,CURSE
|
||
CAMN T,ADDR(A,TXY)
|
||
POPJ P,
|
||
STORE(T,A,TXY) ;NEW DEF OFFSET
|
||
TRO MCHG
|
||
JRST UPLOFF ;UPDATE OFFSET FOR ALL INSTANCES WITH FIXLOC ON
|
||
|
||
EMOVET: TRNE INMOV
|
||
JRST PERRET
|
||
MOVE A,CURBOD
|
||
FETCH(TT,A,TYP3) ;ANY CHAR OFFSET?
|
||
JUMPN A,EMOVT1
|
||
MOVEI TT,-1+ADDR(A,TOXY)
|
||
STORE(TT,A,TYP3) ;SETUP DUMMY POINTER (USED AS FLAG)
|
||
EMOVT1: FETCH(T,A,TXY)
|
||
MOVEI A,-1+ADDR(A,TOXY)
|
||
PUSHJ P,TOFSET
|
||
JSP TT,DOMOVE
|
||
;MOVE SUBR
|
||
MOVE A,CURBOD
|
||
FETCH(TT,A,TXY)
|
||
MOVEI A,-1+ADDR(A,TOXY)
|
||
PUSHJ P,TOFMOV
|
||
CAMN T,1(A)
|
||
POPJ P,
|
||
JRST UPLOFF
|
||
>;MD
|
||
;MOVE SET
|
||
DOSMOV: MOVE A,CLOSES
|
||
TRZ MD,<LMOVE!>TMOVE!TFLG!INMOV
|
||
JRST SMOVE1
|
||
|
||
SMOVE: TRNN STBOX ;ARE WE MOVING ALREADY OR DRAWING A BOX
|
||
PUSHJ P,GETCLS ;CURRENT SET
|
||
JRST PERRET ;NONE
|
||
SMOVE1: MOVE T,1(A) ;LOC OF CENTER
|
||
JSP TT,DOMOVG
|
||
;MOVE SUBR
|
||
MOVE A,CLOSES ;CURRENT SET
|
||
ROUTE,<MPC,<TLZ M,%ROUTE>> ;MAKE HIM ROUTE AGAIN
|
||
MOVE T,CURSE ;CURRENT CURSOR POSITION
|
||
ADJUST(SUB,T,<1(A)>) ;GET DIFFERENCE
|
||
JUMPE T,CPOPJ ;RETURN IF HE DIDN'T MOVE
|
||
MOVE TT,CURSE
|
||
MOVEM TT,1(A) ;NEW SET LOC.
|
||
HLRZ A,(A) ;POINT TO FIRSTSET MEMBERS
|
||
JUMPE A,CPOPJ
|
||
TRO MCHG ;PIC WILL CHANGE
|
||
MMSET1: HRRZ B,1(A) ;POINT
|
||
JUMPE B,NOPNTM ;NO POINT HERE
|
||
MOVE TT,T
|
||
ADJUST(ADD,TT,<1(B)>) ;NEW LOC
|
||
MOVEM TT,1(B) ;SAVE
|
||
NOPNTM: HLRZ B,1(A) ;BODY
|
||
JUMPE B,NOBODM ;NO BODY HERE
|
||
MOVE TT,T
|
||
ADJUST(ADD,TT,<1(B)>) ;NEW LOC
|
||
MOVEM TT,1(B) ;SAVE
|
||
PUSH P,A
|
||
MOVE A,B
|
||
PUSH P,T
|
||
PUSHJ P,BODFIX
|
||
POP P,T
|
||
POP P,A
|
||
NOBODM: HRRZ A,(A) ;NEXT MEMBERS
|
||
JUMPN A,MMSET1
|
||
MPC,< MOVE A,CLOSES ;FIX FEED THROUGHS
|
||
JRST FEDFIX
|
||
>;MPC
|
||
MD,< MOVE G,CLOSES
|
||
HLRZ G,(G)
|
||
FIXPNT: HRRZ A,1(G) ;GET A POINT POINTER
|
||
JUMPE A,FXNOPT ;NO POINT HERE
|
||
MOVE TT,1(A) ;X,Y
|
||
PUSHJ P,PMOVY ;MOVE VERTICAL ONES
|
||
PUSHJ P,PMOVX ;MOVE HORIZONTAL ONES
|
||
FXNOPT: HLRZ A,1(G) ;BODY IN SET
|
||
JUMPE A,FXNPNS ;NO BODY
|
||
JRST FIXPN1
|
||
|
||
FIXPIN: PUSH P,A
|
||
MOVE TT,1(A)
|
||
PUSHJ P,PMOVX
|
||
PUSHJ P,PMOVY
|
||
POP P,A
|
||
FIXPN1: FETCH(A,A,BPLNK)
|
||
JUMPN A,FIXPIN
|
||
FXNPNS: HRRZ G,(G) ;NEXT SET MEMBERS
|
||
JUMPN G,FIXPNT ;AND LOOP
|
||
POPJ P,
|
||
>;MD
|
||
;MICRO MOVEMENT COMMANDS
|
||
MD,<
|
||
LOCTM: MOVEI T,1
|
||
LSH T,@MODE
|
||
TDNN T,[1TXTM!1PNTM!1EDTTM!1BTXTM]
|
||
JRST PERRET
|
||
TDNN T,[1EDTTM!1BTXTM]
|
||
JRST LOCTM1
|
||
PUSHJ P,GETCLS
|
||
JRST PERRET
|
||
MOVEI T,1
|
||
ANDCAM T,ADDR(A,TXXY)
|
||
MOVEI B,-1+ADDR(A,TXOFF)
|
||
TRO TMOVE ;MOVE T OFFSET
|
||
JRST LOCMTY
|
||
|
||
LOCTM1: PUSHJ P,GETCLS
|
||
JRST PERRET
|
||
CLRBIT(FIXTXT!FIXRHT,TTT,A,PBIT)
|
||
FETCH(B,A,PLOC)
|
||
JUMPE B,PERRET
|
||
TRO TMOVE
|
||
JRST LOCMTY
|
||
|
||
BLCLM: PUSHJ P,GETCLS
|
||
JRST PERRET
|
||
FETCH(B,A,BLOC)
|
||
JUMPE B,PERRET
|
||
CLRBIT(FIXBLO,T,A,BBIT)
|
||
MOVEI B,-1+ADDR(A,BLO)
|
||
JRST LOCMTY
|
||
|
||
ELCLM: MOVE A,CURBOD
|
||
FETCH(B,A,TYP3)
|
||
TRZ TMOVE
|
||
JUMPN B,LOCMTY
|
||
MOVEI B,-1+ADDR(A,TOXY)
|
||
STORE(B,A,TYP3)
|
||
JRST LOCMTY
|
||
|
||
LOCLM: MOVEI T,1 ;MICRO-MOVE TEXT
|
||
LSH T,@MODE
|
||
TDNE T,[1EDTM]
|
||
JRST ELCLM
|
||
TDNE T,[1BODM]
|
||
JRST BLCLM
|
||
TDNN T,[1TXTM!1PNTM]
|
||
JRST PERRET
|
||
PUSHJ P,GETCLS
|
||
JRST PERRET
|
||
FETCHL(TTT,A,PBIT)
|
||
TLNN TTT,CPIN
|
||
JRST PERRET
|
||
TLZ TTT,FIXCON
|
||
STOREL(TTT,A,PBIT)
|
||
FETCH(B,A,PLOC)
|
||
TRZ TMOVE
|
||
;MICRO MOVE TEXT OFFSET
|
||
;B = POINTER TO OFFSET BLOCK (LIKE TEXCOF)
|
||
LOCMTY: TRZ INLIN
|
||
TLNN M,DSKACT!MACACT
|
||
OUTSTR[ASCIZ/USE CURSOR MOVE COMMANDS TO MOVE OFFSET.
|
||
/]
|
||
TRO INMOV ;TURN ON MOVING SO BIG LETTERS GO AWAY
|
||
LOCM: PUSHJ P,GETCHR
|
||
LDB D,[POINT 2,C,28]
|
||
ANDI C,177
|
||
MOVSI TTT,-MICLEN
|
||
LOCM1: CAME C,MICCHR(TTT)
|
||
AOBJN TTT,.-1
|
||
SETZB T,TT
|
||
XCT MICTAB(TTT)
|
||
ASH T,(D) ;SHIFT BY BITS BEING HELD DOWN
|
||
ASH TT,(D)
|
||
HRRE TTT,1(B)
|
||
ADD TT,TTT
|
||
HLRE TTT,1(B)
|
||
ADD T,TTT
|
||
HRL TT,T
|
||
CAMN TT,1(B)
|
||
JRST LOCM
|
||
MOVEM TT,1(B) ;STO Y
|
||
TRO MCHG ;CHANGES PIC
|
||
JRST LOCM
|
||
|
||
LOCMDN: TRZ INMOV ;DONE, TURN OFF MOVING
|
||
POPJ P, ;AND LEAVE
|
||
|
||
NOSKEY,<
|
||
MICCHR: ")" ;RIGHT SMALL
|
||
"(" ;LEFT SMALL
|
||
"/" ;UP SMALL
|
||
"\" ;DOWN SMALL
|
||
"]" ;RIGHT BIG
|
||
"[" ;LEFT BIG
|
||
"" ;UP BIG
|
||
"" ;DOWN BIG
|
||
12 ;NOOP
|
||
ALTMOD ;LEAVE
|
||
40 ;LEAVE
|
||
MICLEN__.-MICCHR
|
||
>;NOSKEY
|
||
SKEY,<
|
||
MICCHR: "9" ;RS
|
||
"8" ;LS
|
||
"6" ;US
|
||
"7" ;DS
|
||
")" ;RB
|
||
"(" ;LB
|
||
"&" ;UB
|
||
"'" ;DB
|
||
12 ;NOOP
|
||
ALTMOD ;LEAVE
|
||
40 ;LEAVE
|
||
MICLEN__.-MICCHR
|
||
>;SKEY
|
||
MICTAB: MOVEI T,1 ;RS
|
||
MOVNI T,1 ;LS
|
||
MOVEI TT,1 ;US
|
||
MOVNI TT,1 ;DS
|
||
MOVEI T,20 ;RB
|
||
MOVNI T,20 ;LB
|
||
MOVEI TT,20 ;UB
|
||
MOVNI TT,20 ;DB
|
||
JRST LOCM ;NOOP
|
||
JRST LOCMDN ;LEAVE
|
||
JRST LOCMDN ;LEAVE
|
||
JRST MICERR ;UNKNOWN COMMAND
|
||
|
||
MICERR: PUSHJ P,PERRET
|
||
JRST LOCM
|
||
>;MD
|
||
;MOVE ALONG LINES
|
||
LINUP: MOVEI TTT,2
|
||
JRST DOMLIN
|
||
|
||
LINDWN: MOVEI TTT,3
|
||
JRST DOMLIN
|
||
|
||
LINRT: TDZA TTT,TTT
|
||
LINLFT: MOVEI TTT,1
|
||
DOMLIN: TRNE INMOV
|
||
JRST [ SKIPN A,CLOSES
|
||
JRST PERRET
|
||
JRST LINMOV]
|
||
PUSHJ P,GETCLS
|
||
JRST PERRET
|
||
LINMOV:
|
||
MD,< XCT PERTAB(TTT)
|
||
JUMPN H,LINMV4 ;PERFECT MATCH?
|
||
XCT LASTAB(TTT)
|
||
JUMPE H,PERRET ;ANY SECONDARY CHOICE?
|
||
TLNN H,-1
|
||
JRST LINMV4
|
||
MOVS H,H
|
||
TLNE H,-1
|
||
JRST PERRET
|
||
>;MD
|
||
MPC,<
|
||
SETZB H,G ;NO CHOICE YET, MAX SLOPE =0 SO FAR
|
||
SETZ F, ;ALSO LAST DITCH CHOICE
|
||
FETCH(B,A,PNEB)
|
||
JUMPE B,PERRET ;LOSE IF NO NEIGHBORS
|
||
LINMV1: MOVEI C,2
|
||
LINMV2: XCT (C)[HLRZ D,(B)
|
||
HRRZ D,1(B)
|
||
HLRZ D,1(B)]
|
||
JUMPE D,LINMV3
|
||
MOVE T,1(D)
|
||
ADJUST(SUB,T,<1(A)>)
|
||
HRRE TT,T ;Y TO TT
|
||
HLRE T,T ;X TO T
|
||
XCT LASTAB(TTT) ;IS IT A SECONDARY CHOICE??
|
||
XCT SIDTAB(TTT) ;IS IT EVEN A CHOICE?
|
||
XCT PERTAB(TTT) ;IS IT A PERFECT LINE?
|
||
TRNE TTT,2 ;IF VERT
|
||
EXCH T,TT ;INTERCHANGE X AND Y
|
||
IDIV T,TT ;X/Y (OR Y/X FOR VERT)
|
||
MOVM T,T
|
||
CAMG T,G ;BIGGER?
|
||
JRST LINMV3 ;NO
|
||
MOVE H,D
|
||
MOVE G,T
|
||
LINMV3: SOJGE C,LINMV2
|
||
HRRZ B,(B)
|
||
JUMPN B,LINMV1
|
||
JUMPN H,LINMV4 ;ERROR IF NO GOOD ONE FOUND
|
||
JUMPLE F,PERRET ;IF NONE, OR TOO MANY, LOSE
|
||
MOVE H,F
|
||
JRST LINMV4
|
||
|
||
LINMV6: JUMPE F,.+2
|
||
HRRO D,D ;FLAG TOO MANY
|
||
MOVE F,D
|
||
JRST LINMV3
|
||
|
||
LINMV5: MOVE H,D
|
||
>;MPC
|
||
LINMV4: FETCHL(T,H,PBIT)
|
||
TRNN MD,<LMOVE!>TMOVE ;IF WERE MOVING OFFSETS
|
||
TLNE T,MPC,<CPIN!>ISPIN ;OR THIS PIN
|
||
TRZN INMOV ;STOP MOVING
|
||
CAIA
|
||
TRO NEEDCL
|
||
MOVE T,H
|
||
JRST SCLOSP
|
||
|
||
MD,<
|
||
PERTAB: FETCH(H,A,PNR)
|
||
FETCH(H,A,PNL)
|
||
FETCH(H,A,PNU)
|
||
FETCH(H,A,PND)
|
||
|
||
LASTAB: MOVE H,ADDR(A,PND) ;UD
|
||
MOVE H,ADDR(A,PND) ;UD
|
||
MOVE H,ADDR(A,PNL) ;LR
|
||
MOVE H,ADDR(A,PNL) ;LR
|
||
>;MD
|
||
|
||
MPC,<
|
||
LASTAB: JUMPE T,LINMV6 ;R
|
||
JUMPE T,LINMV6 ;L
|
||
JUMPE TT,LINMV6 ;U
|
||
JUMPE TT,LINMV6 ;D
|
||
|
||
SIDTAB: JUMPLE T,LINMV3 ;R NEG X IS WRONG
|
||
JUMPGE T,LINMV3 ;L POS X IS WRONG
|
||
JUMPLE TT,LINMV3 ;U NEG Y IS WRONG
|
||
JUMPGE TT,LINMV3 ;D POS Y IS WRONG
|
||
|
||
PERTAB: JUMPE TT,LINMV5 ;R
|
||
JUMPE TT,LINMV5 ;L
|
||
JUMPE T,LINMV5 ;U
|
||
JUMPE T,LINMV5 ;D
|
||
>;MPC
|