mirror of
https://github.com/PDP-10/its.git
synced 2026-03-06 11:23:32 +00:00
971 lines
18 KiB
Plaintext
971 lines
18 KiB
Plaintext
;<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
|