1
0
mirror of https://github.com/PDP-10/its.git synced 2026-03-06 11:23:32 +00:00
Files
PDP-10.its/src/draw/draw.338
2018-05-05 19:19:09 +02:00

971 lines
18 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
;<DRAW>DRAW.FAI.75, 15-NOV-75 18:03:51, EDIT BY HELLIWELL
VERSION(DRAW,12)
DISP: TLNN DSPACT
POPJ P,
MOVE T,MODE ;GET MODE
MPC,< CAIE T,MALTM
CAIN T,ALTM
JRST TXTDIS ;THIS IS SPECIAL
>;MPC
MD,<
JRST @MTAB(T) ;DISPATCH
MTAB: DP2 ;S
DP2 ;B
DP2 ;P
DP2 ;L
DP2 ;T
TXTDIS ;A
TXTDIS ;MA
DP2 ;SP
DP2 ;BT
TXTDIS ;BTA
DPED ;E
DPEDI ;EI
DPED ;ET
DPED ;EP
DPEDGT ;EG
TXTDIS ;EA
REPEAT NUMODES+<MTAB-.>,<CPOPJ
>
;MAIN DISPLAY, CARD STUFF
DP2: PUSHJ P,CLEAR1
PUSHJ P,CLEAR2
>;MD
TRZN MCHG
JRST @DSPDSP
SOFAR
PUSHJ P,BLDISP
SOFAR
MOVEI T,MAINPG
MOVEM T,PGLASS
PUSHJ P,DPYSET
PUSHJ P,UPSET ;UPDATE CURRENT SET!
MD,< PUSHJ P,UPLOC ;UPDATE GLOBAL CARD LOC
SKIPN SWIDTH ;ANY BOX TO SHOW?
JRST NOSBOX ;NO
PUSH P,M
TLO M,LWINDOW ;ALWAYS LWINDOW THIS BOX
MOVE T,SWIDTH
HRR T,SHEIGHT
PUSHJ P,AIVECT
MOVS T,SWIDTH
HRR T,SHEIGHT
PUSHJ P,AVECT
MOVS T,SWIDTH
HLR T,SHEIGHT
PUSHJ P,AVECT
MOVE T,SWIDTH
HLR T,SHEIGHT
PUSHJ P,AVECT
MOVE T,SWIDTH
HRR T,SHEIGHT
PUSHJ P,AVECT
POP P,T
TLNN T,LWINDOW
TLZ M,LWINDOW
NOSBOX:
>;MD
MPC,<
ROUTE,< PUSHJ P,PDISP >
PUSHJ P,UPSIDE ;SOLDER-COMPONENT STUFF
TLNN M,CRDISP
JRST CRDDON
PUSHJ P,SETDEF
MOVEI A,CRDLST
JRST CRDLIP
CRDLOP: MOVE T,1(A)
TRZE T,1
JRST [ PUSHJ P,AIVECT
JRST CRDLIP]
PUSHJ P,AVECT
CRDLIP: HRRZ A,(A)
JUMPN A,CRDLOP
TRNE M,XFINGER
JRST NOTARG ;SKIP TARGETS IF NO FINGERS
HLRZ A,CRDLST
JUMPE A,NOTARG
DOTARG: MOVE T,1(A)
PUSHJ P,BIGAIV
nodec,< MOVEI T,""+""+1 >
dec,< movei t,""+""+1 >
PUSHJ P,TXTDPB
NTARG: HRRZ A,(A)
JUMPN A,DOTARG
NOTARG: MOVE T,DEFBRT
PUSHJ P,DPYBRT ;BRIGHT IN BOTH SIDES MODE
PUSHJ P,FNGBAR ;DO FINGERS AND BARS
TRNN BTHSDS
JRST CRDDON ;ONLY ONE SIDE
SWITCH
PUSHJ P,FNGBAR
SWITCH
CRDDON: CHECKIN
>;MPC
;MAIN DISPLAY, BODIES AND POINTS
MOVE T,DEFBRT
PUSHJ P,DPYBRT
SKIPE E,DBODPN
PUSHJ P,BODYS
CHECKIN
MPC,< MOVE T,BTHBRT
TRNE BTHSDS
PUSHJ P,DPYBRT
>;MPC
SKIPE E,PONPNT
PUSHJ P,POINTS
MPC,< TRNN BTHSDS
JRST NOBOTH
CHECKIN
SWITCH
MOVE T,DEFBRT
PUSHJ P,DPYBRT
PUSH P,M
TLZ M,CLOCS
TRO M,NDIPS
SKIPE E,PONPNT
PUSHJ P,POINTS
POP P,M ;RESTORE FLAGS
SWITCH
NOBOTH:
>;MPC
PUSHJ P,MAINOU ;ALL DONE, DISPLAY IT!
SOFAR ;FINISHED, MAKE US A NOOP
POPJ P,
;BODIES
;MAP DOWN BODY LIST IN E, DISPLAYING BODY OUTLINES, BODY LOC, BODY TEXT
;E = BODY POINTER
BODYS: FETCH(D,E,BXY)
FETCH(A,E,BTYP) ;BODY DEFINITION
FETCH(F,E,BORI)
TLNN M,BLOCS
JRST DISLC2
MD,< FETCH(T,E,BBIT)
TLNN M,UNHIDE ;IF UNHIDING, ALWAYS DISPLAY
TRNN T,FIXLOC ;IS BODY LOC OFFSET TRACKING DEFINITION?
JRST DISLC1 ;NO, WILL DISPLAY
FETCH(T,A,TBIT)
TRNE T,XDISLOC ;SUPPRESSING DISPLAY OF LOC?
JRST DISLC2 ;YES
DISLC1: FETCH(B,E,BLOC)
JUMPE B,DISLC2 ;IS THERE ANY?
MOVE T,STDBIG
PUSHJ P,DPYBIG
PUSH P,A
FETCH(A,E,BXY)
ADJUST(ADD,A,<ADDR(E,BLXY)>) ;LOC + OFFSET
FETCH(B,E,BLO)
PUSHJ P,ABCALC ;ADJUST FOR CHAR GEN OFFSET
POP P,A
>;MD
MPC,<
FETCH(T,E,BLN)
JUMPE T,DISLC2 ;NO NUMBER
MOVE T,STDBIG
PUSHJ P,DPYBIG
FETCH(T,E,BXY)
PUSHJ P,PINPOS
>;MPC
PUSHJ P,BODNUM ;PRINT BODY LOC FROM E
DISLC2:
MPC,< TLNN M,%IDENT
JRST NDIPID
FETCH(B,E,BNAM)
JUMPE B,NDIPID
MOVE T,STDBIG
PUSHJ P,DPYBIG
FETCH(T,E,BXY)
PUSHJ P,AIVECT
MOVEI T,25 ;ASCID/LF/
PUSHJ P,TXTDPB
PUSHJ P,PLUNK ;AND STRING
NDIPID:
>;MPC
MD,< FETCH(T,E,BTXT)
MOVEM T,BTXLST
>;MD
;SO FAR
;D = X,,Y
;A = TYPE
;F = ORIENTATION
;E = BODY
PUSHJ P,OUTBOD ;OUTPUT THE BODY LINES AND PROP/TEXT
ARN1: FETCH(E,E,BNXT)
JUMPN E,BODYS ;LOOP IF ANY LEFT
POPJ P,
PLUNK: MOVE T,1(B)
TRO T,1
PUSHJ P,TXTDPB
HRRZ B,(B)
JUMPN B,PLUNK
POPJ P,
;POINTS
POINTS: PUSHJ P,DLOP3
FETCH(E,E,PNXT)
JUMPN E,POINTS
POPJ P,
;DLOP3 CALLED FROM LAYOUT STUFF TO BLINK WIRE
;E = POINT
DLOP3: FETCH(T,E,PXY)
PUSHJ P,ONSCR
JRST [ TLNE M,LWINDOW
PUSHJ P,DLOP5 ;OFF SCREEN, DO LINES IF WINDOWING
POPJ P,] ;THEN LEAVE
PUSHJ P,DLOP5 ;DO LINES, THEN GO ON
FETCHL(D,E,PBIT)
;MORE POINTS, SHOW PAD, DRILL HOLE, PLANE CONNECTIONS (PC)
;E = POINT
;D = FLAGS,,
MPC,< FETCH(T,E,PIN) ;PAD #
TLNE D,ISPIN ;HANDLE PIN SEPERATELY
JRST [ TRNE M,NDIPS ;SUPPRESSING DIP PINS?
JRST NOPLAN ;YES
; CAIE T,1 ;LET 1 GO BY
; JRST SHWPAD
MOVE T,NSCALE
CAIL T,5
JRST SHWPAD
JRST NOPLAN]
TRNE M,XFEED ;SUPPRESSING FEED THROUGHS?
JRST NOFEED
TLNN D,FEEDTH
JUMPE T,NOFEED
SHWPAD: FETCH(T,E,PXY)
FETCH(TT,E,PIN)
CAIN TT,2 ;2 (CLEARANCE) SHOULD BE BIGGER
JRST [ PUSHJ P,SM2AIV
JRST .+2]
PUSHJ P,SMLAIV
TLNE D,ISPIN!FEEDTH
NODEC,< SKIPA T,[""+""+1] >
DEC,< SKIPA T,[""+""+1] >
MOVEI T,"O"+"O"+1
FETCH(TT,E,PIN)
SKIPN TT
MOVEI T,"X"+"X"+1
CAILE TT,2
JRST [ CAILE TT,=9
MOVEI TT,"??"-60 ;FLAG AS ERROR
MOVEI T,60(TT)
LSH T,1
TRO T,1
JRST .+1]
PUSHJ P,TXTDPB
NOFEED: TLNN D,PLANES
JRST NOPLAN
FETCH(T,E,PXY)
PUSHJ P,SMGAIV
LDB T,[%%PLANES,,D]
MOVE T,(T)[ 1
ASCID/\/
ASCID//
ASCID/=/
ASCID//
1
1
1 ]
PUSHJ P,TXTDPB
NOPLAN:
>;MPC
;MORE POINTS, PIN NUMBERS, TEXT.
;FALLS THRU FROM DLOP3
;D = FLAGS,,
;E = POINT
TLNE M,CLOCS
TLNN D,CPIN ;DOING PINS, IS THIS A CONNECTOR PIN?
JRST NOCONP ;DON'T HAVE TO FOOL AROUND HERE
MD,<
MOVE A,E ;A = POINT
TRNN M,NOCBOX ;SKIPPING CBOX FOR NOW?
PUSHJ P,CONBOX ;PUT BOX FOR CONNECTOR ID (E=POINT)
MOVE T,STDBIG
PUSHJ P,DPYBIG
PUSHJ P,CALCOF ;POSITION BEAM TO X,Y (WITH CHAR OFFSET)
>;MD
MPC,< FETCH(T,E,PXY)
PUSHJ P,SMLAIV ;VECTOR TO THERE
>;MPC
PUSHJ P,CONNUM ;E=POINT
MD,< JRST NONUMP ;CHECK IF MUST FOOL
NOCONP: TLNN D,ISPIN ;YES, IS THIS A PIN?
JRST NONUMP
TLNN M,RPINID
JRST NORID
;Display "real" PINID from TYPE
MOVE T,STDBIG
PUSHJ P,DPYBIG
FETCH(T,E,BPXY)
PUSHJ P,PINPOS
FETCH(TTT,E,BBODY) ;PTR TO BODY
FETCH(TTT,TTT,BORI) ;GET ORIENTATION FROM BODY
FETCH(T,E,BPLOC) ;PIN BLOCK FROM TYPE
PUSHJ P,DISRID ;DISPLAY REAL PIN ID
JRST NONUMP
NORID: TLNN M,PLOCS ;DOING PINS?
JRST CKPNID ;NO, CHECK ID'S
;Display assigned PIN locs from BODY
FETCH(TT,E,BPLOC) ;GET PIN OF TYPE
FETCH(T,TT,TPBIT)
TRNE T,BUSSED ;BUSSED THROUGH?
TLNE M,UNHIDE ;YES, ARE WE UNHIDING THEM?
CAIA ;NOT BUSSED OR UNHIDING
JRST NONUMP ;BUSSED AND NOT UNHIDING
FETCH(T,E,BPPN) ;GET PIN NAME
JUMPN T,ISNUMP
TLNN M,PINIDS ;IF NOT ASSIGNED, MAYBE DISPLAY DEFAULT?
JRST NONUMP
FETCH(T,TT,TPNAM) ;DEFAULT PIN NAME FROM TYPE
ISNUMP: PUSH P,T
MOVE T,STDBIG
PUSHJ P,DPYBIG
FETCH(T,E,BPXY)
PUSHJ P,PINPOS ;GO THERE, THIS WILL GET FUDGED PROPERLY
POP P,A ;A=PIN#, E=BPOINT
PUSHJ P,DISPIN ;DISPLAY IT
JRST NONUMP
CKPNID: TLNN M,PINIDS
JRST NONUMP
;Display default PIN names from TYPE
MOVE T,STDBIG
PUSHJ P,DPYBIG
FETCH(T,E,BPXY)
PUSHJ P,PINPOS
FETCH(TTT,E,BBODY)
FETCH(TTT,TTT,BORI)
FETCH(T,E,BPLOC)
PUSHJ P,DISDEF
>;MD
MPC,<NOCONP:>
NONUMP: FETCH(B,E,PTXT) ;GET TEXT POINTER
JUMPE B,DLOP4 ;ANY AT ALL?
TRNE M,NPTEXT
JRST DLOP4
FETCH(A,B,TCXY)
FETCH(B,B,TCSTR)
FETCH(T,B,TSSIZ)
ANDI T,377777
MOVE C,T ;SAVE SIZE
PUSHJ P,DPYBIG ;SET SIZE
PUSH P,B
FETCH(B,E,PXY)
EXCH A,B ;A=MAIN, B= CHAR OFFSET
PUSHJ P,CALCOL ;MOVE BEAM TO TEXT (WITH CHAR OFFSET)
POP P,B
PUSHJ P,DTXT ;DISPLAY TEXT
DLOP4: POPJ P,
;POINT SUBR, DRAW LINES
LINOUT: FETCH(T,E,PXY)
MPC,< CAMGE T,ADDR(A,PXY)
POPJ P,
>;MPC
PUSHJ P,AIVECT ;DRAW INVIS. TO IT
FETCH(T,A,PXY)
JRST AVECT ;DRAW VIS. TO IT & LEAVE
;SUBR TO DRAW LINES
DLOP5: TRNE M,NLINES
POPJ P, ;NOT DOING LINES!
MD,<
DEFINE FOO ' (DIR)
< FETCH(A,E,PN'DIR)
JUMPE A,.+2
PUSHJ P,LINOUT
>
FOO(U)
FOO(R)
POPJ P,
>;MD
MPC,<
FETCH(D,E,PNEB)
JUMPE D,CPOPJ
DLOP7: MOVEI B,2
DLOP8: XCT (B)[ HLRZ A,(D)
HRRZ A,1(D)
HLRZ A,1(D)]
JUMPE A,.+2
PUSHJ P,LINOUT
SOJGE B,DLOP8
HRRZ D,(D)
JUMPN D,DLOP7
POPJ P,
>;MPC
;EDIT DISPLAY (D)
MD,<
EDDISR: TRZN MCHG
TRNE INMOV
JRST EDDIS1
POP P,(P)
POPJ P,
EDDIS1: PUSHJ P,CLEAR1
PUSHJ P,CLEAR2
MOVEI T,MAINPG
MOVEM T,PGLASS ;USE PIECE OF (GL)ASS NUMBER 3 (FOR EDITING BODY)
PUSHJ P,DPYSET
SETZ T,
MOVEI TT,TITBIG
MOVE TTT,[%LEFT,,SCRTOP-CHGHT*TITBIG*3]
PUSHJ P,TITVCT
MOVE T,[ASCID/BODYN/]
PUSHJ P,TXTDPB
MOVE T,[ASCID/AME: /]
PUSHJ P,TXTDPB
MOVE B,CURBOD
HRRZ B,(B)
JRST PLUNK
DPEDGT: MOVE A,GETBOD ;BODY WE ARE GETTING
MOVE D,CURSE ;PUT IT AT CURSOR
MOVE F,GETORT
MOVEI T,ANGLPG ;USE ANGLE PAGE
MOVEM T,PGLASS
PUSHJ P,DPYSET
PUSH P,M
TRZ M,NBTEXT
PUSHJ P,PUTBOD ;DRAW BODY
POP P,M
PUSHJ P,BLINKO
DPED: PUSHJ P,EDDISR
DPEDR: MOVE A,CURBOD ;GET POINTER TO BODY
SETZB D,F ;CLEAR OFFSET AND ORIENTATION
PUSHJ P,PUTBDL ;OUTPUT IT
JRST MAINOU
DPEDI: PUSHJ P,EDDISR
MOVE A,CLSTPN ;GET PRECEDING ("LAST") POINT
SKIPN B,CRPPNT ;GET CURRENT POINT OF BODY
JRST DPEDQ
HRRZ D,(B) ;REMOVE LINK TO CURRENT POINT
HRRM D,(A) ;...
PUSH P,1(D) ;SAVE NEXT X,Y
PUSH P,D ;SAVE D
JUMPE D,DARN ;NO NEXT POINT?
MOVEI T,1
ORB T,1(D) ;MAKE INVISIBLE VECTOR AROUND CURRENT POINT
MOVE T,-1(P) ;GET FOLLOW2 POINT
TRNN T,1 ;VISIBLE?
PUSHJ P,FOLOW1 ;YES, FOLLOW IT
DARN: TRNE ATFP ;AT FIRST POINT?
JRST FARN ;YES, DON'T FOLLOW
MOVE T,1(A) ;NO, GET X,Y
TRZ T,1 ;SHUT OFF VIS/INVIS BIT
TRNN TYPNEG ;NEGATIVE VECT FOLLOWING US?
PUSHJ P,FOLOW2 ;NO, FOLLOW IT
FARN: MOVE A,CURBOD ;GET POINTER TO BODY
SETZB D,F ;CLEAR OFFSET AND ORIENTATION
PUSHJ P,PUTBDL ;PUT IT OUT
POP P,D ;RESTORE D
JUMPE D,[POP P,(P)
JRST .+2]
POP P,1(D) ;RESTORE X,Y FOR FOLLOWING POINT
MOVE B,CRPPNT
MOVE A,CLSTPN
HRRM B,(A) ;RESTORE LINKAGE
JRST MAINOU
DPEDQ: MOVE T,1(A)
TRZ T,1
TRNN ATFP
PUSHJ P,FOLOW1
JRST DPEDR
>;MD
;OUTBOD:(PC)
; CALL WITH
; A=POINTER TO TYPE DEFINITION
; D=X,Y OFFSET
; F=ORIENTATION
MPC,<
PUTBDL: FETCH(B,A,TPIN)
JUMPE B,OUTBD1
PUTBD1: FETCH(T,B,TPXY)
PUSHJ P,ORIENT
ADJUST(ADD,T,D)
PUSHJ P,SMLAIV
NODEC,< MOVEI T,""+""+1 >
DEC,< MOVEI T,""+""+1 >
PUSHJ P,TXTDPB
FETCH(B,B,TPNX)
JUMPN B,PUTBD1
JRST OUTBD1
OUTBOD: MOVE T,NSCALE
CAIGE T,5 ;OR TOO SMALL TO DO ALL POINTS?
JRST JSTBOX ;YES, SIMULATE WITH BOX
OUTBD1: MOVE T,STDBIG
PUSHJ P,DPYBIG ;EVERYTHING HERE IS SIZE ONE
TLNN M,PLOCS ;SHALL WE DO PINS
JRST NONUMS
MOVEI B,ADDR(A,TPIN,TPNX) ;POINTER TO LIST OF PINS IN TYPE
JRST NXTNUM
DONUM: FETCH(T,B,TPXY) ;X,Y OF PIN
PUSHJ P,ORIENT
ADJUST(ADD,T,D) ;OFFSET IT
PUSHJ P,AIVECT
FETCH(T,B,TPID) ;PAD NAME
PUSHJ P,DISNUM
NXTNUM: FETCH(B,B,TPNX) ;NEXT PIN IN TYPE
JUMPN B,DONUM
NONUMS: FETCH(B,A,TPIN)
JUMPE B,NONMS1
FNPIN1: FETCH(T,B,TPID) ;FIND PIN #1
CAIN T,1
JRST ISPIN1
FETCH(B,B,TPNX)
JUMPN B,FNPIN1
JRST NONMS1
ISPIN1: FETCH(T,B,TPXY) ;DISPLAY GREATER THAN ON PIN 1
PUSHJ P,ORIENT
ADJUST(ADD,T,D)
PUSHJ P,SM1AIV
MOVEI T,76*2+1 ;"GREATER THAN"
PUSHJ P,TXTDPB
NONMS1: TRNN M,NDIPS ;IF NO PINS BEING SHOWN, DRAW BOX
POPJ P,
JSTBOX: FETCH(B,A,TDPY)
SKIPN B
FETCH(B,A,TPIN)
TLO B,-1
JSTLOP: FETCH(T,B,QXY)
PUSHJ P,ORIENT
ADJUST(ADD,T,D)
TLNE B,-1 ;FIRST TIME?
JRST [ PUSHJ P,AIVECT ;YES
JRST .+2]
PUSHJ P,AVECT
HRRZ B,(B) ;GET NEXT AND INDICATE NOT FIRST TIME
JUMPN B,JSTLOP
POPJ P,
>;MPC
;OUTBOD:(D)
MD,<
;A = POINTER TO TYPE DEFINITION
;D = X,Y OFFSET
;F = ORIENTATION
PUTBDL: TLNN M,BLOCS ;BODY LOCS ENABLED?
JRST PUTBOD ;NO
MOVE T,STDBIG
PUSHJ P,DPYBIG
FETCH(B,A,TYP3) ;EXPLICIT CHARACTER OFFSET?
JUMPN B,[FETCH(B,A,TOXY) ;YES
JRST NLCFDG]
MOVE B,STDBIG
PUSH P,PUTCHR
MOVE T,[AOS CHRCNT]
MOVEM T,PUTCHR
SETZM CHRCNT
PUTSTR @PROTOB ;MEASURE SIZE OF PROTO LOC
POP P,PUTCHR
MOVN T,CHRCNT
FETCH(TT,A,TBIT)
TRNE TT,XDISLOC
SUBI T,9 ;"(-DISLOC)"
IMUL T,VIRPTX(B)
ASH T,-1
MOVN B,VIRPTY(B)
ASH B,-1
HRL B,T
NLCFDG: PUSH P,A
FETCH(A,A,TXY) ;LOC-TEXT OFFSET
ADJUST(ADD,A,D)
PUSHJ P,ABCALC
POP P,A
MOVE T,@PROTOB ;GET PROTOTYPE DIP LOC
PUSHJ P,TXTDPB
FETCH(T,A,TBIT)
TRNN T,XDISLOC ;SUPPRESSING DISPLAY OF LOC FOR BODIES?
JRST PUTBOD
MOVE T,[ASCID/(-DIS/]
PUSHJ P,TXTDPB
MOVE T,[ASCID/LOC)/]
PUSHJ P,TXTDPB
PUTBOD: SETZM BTXLST
TLNN M,RPINID!PINIDS ;DOING PIN ID'S?
JRST OUTBOD ;NO
MOVE T,STDBIG
PUSHJ P,DPYBIG
FETCH(B,A,TPIN)
JUMPE B,NONUM
DONUM: FETCH(T,B,TPXY) ;GET X,Y OF PIN
PUSHJ P,ORIENT ;ORIENT IT
ADJUST (ADD,T,D) ;ADD BODY CENTER
PUSHJ P,PINPOS ;MOVE BEAM FOR START OF CHAR
MOVE T,B ;TPIN BLOCK
MOVE TTT,F ;ORIENTATION
TLNE M,RPINID
PUSHJ P,DISRID ;DISRID(T=TPIN, TTT=BORI)
TLNN M,RPINID
PUSHJ P,DISDEF
NXTNUM: FETCH(B,B,TPNX)
JUMPN B,DONUM
NONUM:
;OUTBOD - DISPLAY TYPE OUTLINE AND PROPERTY TEXT
;FALLS THRU
; CALL WITH
; A=POINTER TO TYPE DEFINITION
; D=X,Y OFFSET
; F=ORIENTATION
; E=BODY
; BTXLST = TEXT FROM BODY (IF NONE, DISPLAY TYPE'S TEXT)
OUTBOD: FETCH(B,A,TLIN)
JUMPE B,DBPNT1 ;NO MORE LINES?
DLOP1: MOVE T,1(B) ;GET X,Y
TRZE T,1 ;INVISIBLE?
TLO B,400000 ;FLAG INVISIBLE (WAS CLEARED BY HRRZ)
PUSHJ P,ORIENT
ADJUST(ADD,T,D) ;OFFSET IT
TLNE B,400000 ;INVISIBLE?
JRST [ PUSHJ P,AIVECT ;YES
JRST .+2]
PUSHJ P,AVECT ;NO
HRRZ B,(B) ;GET NEXT LINE
JUMPN B,DLOP1
DBPNT1: TRNE M,NBTEXT
POPJ P,
SKIPN B,BTXLST ;ANY TEXT ON BODY
JRST DLOPDF ;NO, TRY TEXT ON TYPE DEF
BDLOP1: PUSH P,B
FETCH(TT,B,TXBIT)
TRNE TT,TXBIND ;INDIRECT TO TYPE?
FETCH(B,B,TXIND)
PUSHJ P,BTXDSP
POP P,B
FETCH(B,B,TXNXT)
JUMPN B,BDLOP1
POPJ P,
;PRINT TEXT ON TYPE DEF
DLOPDF: FETCH(B,A,TPROP)
JUMPE B,CPOPJ ;NONE?
DLOP7: PUSHJ P,BTXDSP
FETCH(B,B,TXNXT)
JUMPN B,DLOP7 ;LOOP
POPJ P,
BTXDSP: PUSH P,B ;TEXT/PROP BLOCK
PUSH P,C
PUSH P,D
PUSH P,E
FETCH(T,B,TXVAL)
FETCH(T,T,TSSIZ)
TLNN M,%IDENT
JUMPE T,BTXDSX ;INVISIBLE
FETCH(T,B,TXXY)
TDZ T,[1,,1]
PUSHJ P,ORIENT
ADD D,T
TLZ D,1
FETCH(T,B,TXVAL)
FETCH(T,T,TSSIZ)
SKIPN T
MOVE T,STDBIG
ANDI T,377777
MOVE C,T ;SAVE SIZE
PUSHJ P,DPYBIG ;LET IT GO INTO VECTOR
PUSH P,B
FETCH(B,B,TXOFF)
MOVE A,D
PUSHJ P,CALCOL ;VECTOR TO IT
POP P,B
FETCH(B,B,TXVAL)
PUSHJ P,DTXT ;DISPLAY IT
BTXDSX: POP P,E
POP P,D
POP P,C
POP P,B ;GET B BACK
POPJ P,
>;MD
;ALTER MODE DISPLAY
TXTDIS: TRZN MCHG
POPJ P,
MOVEI T,BLPG
PUSHJ P,HYDPOG
MOVEI T,MAINPG ;USE MAIN PAGE FOR ALTER STUFF
MOVEM T,PGLASS
PUSHJ P,DPYSET
MOVEI A,1
LSH A,@MODE
TDNN A,[MD,<1BTALTM!1EDTAM!>1MALTM]
JRST NOANAM
MOVE B,REMMAC
MPC,< HRRZ B,1(B) > ;PC ONLY DOES MALTM
MD,< TDNN A,[1BTALTM!1EDTAM]
JRST [ HRRZ B,1(B)
MOVEI A,[ASCID/MACRO NAME: /
0 ]
JRST DOANAM]
FETCH(B,B,TXNAM)
JUMPE B,NOANAM
MOVEI A,[ASCID/PROPERTY NAME: /
0 ]
DOANAM:
>;MD
MOVEI T,0
MOVEI TT,TITBIG
MOVE TTT,[%LEFT,,SCRTOP-CHGHT*TITBIG*3]
PUSHJ P,TITVCT
HRLI A,(<POINT 36,0>)
ANMLOP: ILDB T,A
TRNN T,1
JRST ANMLP1
PUSHJ P,TXTDPB
JRST ANMLOP
ANMLP1: PUSHJ P,PLUNK
NOANAM: MOVEI T,0
MOVEI TT,ACHRSZ
MOVE TTT,[AXPOS,,AYPOS]
PUSHJ P,TITVCT
MOVE B,TXTPNT
ADD B,[POINT 7,1]
SKIPG TT,ALTLIN ;GET TO CORRECT START LINE
JRST ALTLN1
ALTLN2: TLNN B,760000 ;BYTE POINTER OUT?
JRST [ HRR B,-1(B)
TRNE B,-1
JRST .+1
JRST MAINOU] ;OUTPUT BLANK SCREEN
ILDB T,B
CAME T,EOLCHR
JRST ALTLN2
SOJG TT,ALTLN2
ALTLN1: PUSHJ P,ALTTXT ;PUT OUT OUR TEXT
JRST MAINOU
;ORIENTATION TABLES AND ROUTINES
;ORIENT - ROTATE OFFSET FROM ORIGIN IN T
; F = BORI
; T = X,,Y
ORIENT: TRNE F,777770 ;REASONABLE INDEX?
PUSHJ P,FUCKUP ;NO!
XCT (F)XTB1
XCT (F)XTB2
XCT (F)XTB3
TDZ T,[1,,1] ;CLEAR OVERFLOW BITS
POPJ P,
;XCT TABLE FOR 8 STATE ROTATION
;EACH STATE GOES COUNTER CLOCKWISE 90 DEGREES
;UNTIL 4 WHICH IS X,-Y ROTATED
XTB1: TLZ T,1 ;X,Y
TRC T,-2 ;-Y,X
TDCA T,[-2,,-2] ;-X,-Y
MOVS T,T ;Y,-X
MD,<
TRCA T,-2 ;X,-Y
MOVS T,T ;Y,X
TLCA T,-2 ;-X,Y
MOVS T,T ;-Y,-X
>;MD
XTB2: CAIA
ADDI T,2
0
TRC T,-2
MD,<
0
CAIA
0
TDC T,[-2,,-2]
>;MD
XTB3: 0
MOVS T,T
ADD T,[2,,2]
ADDI T,2
MD,<
ADDI T,2
0
ADD T,[2,,0]
ADD T,[2,,2]
>;MD
;TABLE TO UNROTATE USING ORIENT AND CURRENT ROTATION
UNROT: 0
3
2
1
MD,< 4
5
6
7
>;MD
;ROTATE PIN POSITION BY ORIENTATION
;T = PIN POS
;TTT = ORIENTATION
MD,<
PINORI: PUSH P,T
IFN =35-POSB,<LSH T,POSB-=35>
ANDI T,(1POSW)-1
TRNE TTT,777770
PUSHJ P,FUCKUP
XCT XPTB1(TTT)
TRZ T,-(1POSW) ;CLEAR ANY OVERFLOW
TRNE TTT,4 ;GREATER THAN OR EQUAL TO 4?
HRR T,XPTB2(T) ;YES, PERFORM MAPPING
DPB T,[POINT POSW,(P),POSB]
POP P,T
POPJ P,
XPTB1: JFCL
ADDI T,2
ADDI T,4
ADDI T,6
JFCL
SUBI T,2
SUBI T,4
SUBI T,6
XPTB2: 6
5
4
3
2
1
0
7
>;MD
;CARD SUBRS
MPC,<
FNGBAR: SKIPE A,PONPNT
PUSHJ P,CRDFNG
TRNE M,XFINGER
POPJ P,
HRRZ A,BARLST
JUMPE A,CPOPJ
CRDFN2: MOVE B,1(A)
HRRZ A,(A)
JUMPE A,CRDDON
MOVE C,1(A)
PUSHJ P,FAKE ;FAKE BOX FOR FINGER
NFAKE: HRRZ A,(A)
JUMPN A,CRDFN2
POPJ P,
CRDFNG: FETCHL(C,A,PBIT)
TLNN C,CPIN ;IS IT A CONNECTOR PIN?
JRST CRDFN1 ;NO, GET NEXT
TRNE M,XFINGER ;SKIPING WHOLE FINGER?
JRST [ TRNE M,XFEED ;THESE ALSO?
JRST CRDFN1 ;YES, DO NOTHING
FETCH(T,A,PXY)
PUSHJ P,SMLAIV
MOVEI T,"O"+"O"+1
PUSHJ P,TXTDPB
JRST CRDFN1]
FETCH(C,A,PLOC)
MOVE C,1(C)
FETCH(B,A,PXY)
PUSHJ P,FAKE ;FAKE UP THE BOX!
CRDFN1: HRRZ A,(A)
JUMPN A,CRDFNG
POPJ P,
FAKE: MOVE T,B
ADJUST(SUB,T,C) ;DELTA X,Y
MOVEI E,0
MOVEI F,2
TLNE T,400000
MOVEI E,1
TRNE T,400000
MOVEI F,3
HLRE TT,T
MOVMS TT
HRRES T
MOVMS T
CAML TT,T
MOVE F,E
JRST @(F)[ FRIGHT
FLEFT
FUP
FDOWN]
DEFINE XY(X,Y)
< RADIX =10
ADD T,[XWD <X>/5*2,<Y>/5*2]
TDZ T,[(1)1]
RADIX =8
>
FRIGHT: MOVE T,C
XY -FWIDTH,FWIDTH
PUSHJ P,AIVECT
MOVE T,C
XY -FWIDTH,-FWIDTH
PUSHJ P,AVECT
MOVE T,B
XY FWIDTH,-FWIDTH
PUSHJ P,AVECT
MOVE T,B
XY FWIDTH,FWIDTH
PUSHJ P,AVECT
MOVE T,C
XY -FWIDTH,FWIDTH
JRST AVECT
FLEFT: MOVE T,B
XY -FWIDTH,FWIDTH
PUSHJ P,AIVECT
MOVE T,B
XY -FWIDTH,-FWIDTH
PUSHJ P,AVECT
MOVE T,C
XY FWIDTH,-FWIDTH
PUSHJ P,AVECT
MOVE T,C
XY FWIDTH,FWIDTH
PUSHJ P,AVECT
MOVE T,B
XY -FWIDTH,FWIDTH
JRST AVECT
FUP: MOVE T,C
XY -FWIDTH,-FWIDTH
PUSHJ P,AIVECT
MOVE T,C
XY FWIDTH,-FWIDTH
PUSHJ P,AVECT
MOVE T,B
XY FWIDTH,FWIDTH
PUSHJ P,AVECT
MOVE T,B
XY -FWIDTH,FWIDTH
PUSHJ P,AVECT
MOVE T,C
XY -FWIDTH,-FWIDTH
JRST AVECT
FDOWN: MOVE T,B
XY -FWIDTH,-FWIDTH
PUSHJ P,AIVECT
MOVE T,B
XY FWIDTH,-FWIDTH
PUSHJ P,AVECT
MOVE T,C
XY FWIDTH,FWIDTH
PUSHJ P,AVECT
MOVE T,C
XY -FWIDTH,FWIDTH
PUSHJ P,AVECT
MOVE T,B
XY -FWIDTH,-FWIDTH
JRST AVECT
>;MPC