mirror of
https://github.com/PDP-10/its.git
synced 2026-01-31 05:52:12 +00:00
1516 lines
30 KiB
Plaintext
1516 lines
30 KiB
Plaintext
;<DRAW>BODY.FAI.70, 19-NOV-75 19:34:58, EDIT BY HELLIWELL
|
||
VERSION(BODY,6)
|
||
SUBTTL PIN SWAPPING
|
||
|
||
PSWAPA:
|
||
MD,< TRZA TFLG
|
||
PSWAPB: TRO TFLG ;PIN NUMBER SWAP ONLY
|
||
>;MD
|
||
PUSHJ P,PUSHM ;SET DISPLAY MODE
|
||
PUSHJ P,GETCLS
|
||
JRST POPME
|
||
TLNN M,DSKACT!MACACT
|
||
MD,< OUTSTR[ASCIZ/FIRST PIN ID?/] >
|
||
MPC,< OUTSTR[ASCIZ/FIRST PIN NAME?/] >
|
||
PUSHJ P,READP
|
||
JRST POPM ;ALTMODE
|
||
JRST POPME ;ERROR
|
||
JUMPE T,POPM ;LET HIM OUT ON 0
|
||
MOVEM T,N1
|
||
TLNN M,DSKACT!MACACT
|
||
MD,< OUTSTR[ASCIZ/SECOND PIN ID?/] >
|
||
MPC,< OUTSTR[ASCIZ/SECOND PIN NAME?/] >
|
||
PUSHJ P,READP
|
||
JRST POPM ;ALTMODE
|
||
JRST POPME ;ERROR
|
||
PUSHJ P,POPM
|
||
JUMPE T,CPOPJ ;LET HIM OUT ON 0
|
||
MOVEM T,N2
|
||
SETZM L1
|
||
SETZM L2
|
||
MOVEM A,CURBOD ;STO BODY POINTER HERE FOR NOW
|
||
MOVEI B,RADDR(A,BLNK,BPLNK) ;PIN LIST OFF OF BODY
|
||
JRST FNDPN2
|
||
|
||
FNDPN1: MOVE A,B ;CURRENT POINT
|
||
FETCH(T,B,BPLOC) ;GET PIN-LOC BLOCK IN TYPE
|
||
FETCH(T,T,TPID) ;WE'RE DISPLAYING "REAL" PINIDS
|
||
CAME T,N1
|
||
JRST NOTN1
|
||
MPC,< SKIPN L1 ;SAME PIN MAYBE ON BOTH SIDES
|
||
JRST [ MOVEM A,L1
|
||
JRST FNDPN2]
|
||
HRLM A,L1 ;GOTH BOTH POINTS FOR #1
|
||
SKIPN TT,L2
|
||
JRST FNDPN2
|
||
TLNE TT,-1 ;ALSO GOT BOTH FOR #2?
|
||
TLNN TT,-1
|
||
JRST FNDPN2
|
||
JRST GOTBOT
|
||
|
||
NOTN1: CAME T,N2
|
||
JRST FNDPN2
|
||
SKIPN L2
|
||
JRST [ MOVEM A,L2
|
||
JRST FNDPN2]
|
||
HRLM A,L2
|
||
SKIPN TT,L1
|
||
JRST FNDPN2
|
||
TLNE TT,-1
|
||
TLNN TT,-1
|
||
JRST FNDPN2
|
||
JRST GOTBOT
|
||
>;MPC
|
||
|
||
MD,< MOVEM A,L1
|
||
SKIPN TT,L2
|
||
JRST FNDPN2
|
||
JRST GOTBOT
|
||
|
||
NOTN1: CAME T,N2
|
||
JRST FNDPN2
|
||
MOVEM A,L2
|
||
SKIPN TT,L1
|
||
JRST FNDPN2
|
||
JRST GOTBOT
|
||
>;MD
|
||
|
||
FNDPN2: FETCH(B,B,BPLNK)
|
||
JUMPN B,FNDPN1
|
||
OUTSTR[ASCIZ/CAN'T FIND BOTH PINS ON THIS BODY!
|
||
/]
|
||
POPJ P,
|
||
|
||
GOTBOT:
|
||
MPC,< HRRZ T,L1
|
||
FETCH(T,T,BPBIT)
|
||
HRRZ TT,L2
|
||
FETCH(TT,TT,BPBIT)
|
||
EQV TT,T
|
||
TRNN TT,FRONT ;IF NOT ON SAME SIDE
|
||
MOVSS L1 ;MAKE THEM SUCH
|
||
PUSHJ P,SWPPIN
|
||
MOVSS L1
|
||
MOVSS L2
|
||
PUSHJ P,SWPPIN
|
||
MOVE A,CURBOD
|
||
PUSHJ P,BODFIX ;FIX BODY PINS
|
||
TRO MCHG!NEEDCL
|
||
POPJ P,
|
||
>;MPC
|
||
SWPPIN: MOVE T,L1 ;FIRST POINT
|
||
FETCH(TT,T,BPPN)
|
||
MOVE TTT,L2 ;SECOND POINT
|
||
FETCH(A,TTT,BPPN)
|
||
MD,< TRNE TFLG ;JUST CHANGING NUMBERS?
|
||
JRST PNCHNG
|
||
>;MD
|
||
STORE(A,T,BPPN)
|
||
STORE(TT,TTT,BPPN) ;PIN #'S STAY WITH ID'S IN CASE BUSSED THROUGH
|
||
FETCH(TT,T,BPLOC)
|
||
FETCH(A,TTT,BPLOC)
|
||
STORE(A,T,BPLOC)
|
||
STORE(TT,TTT,BPLOC)
|
||
MPC,< POPJ P, >
|
||
MD,< MOVE A,CURBOD
|
||
PUSHJ P,BODFIX ;FIX BODY PINS
|
||
MOVE A,L1 ;AND MOVE RESULTS
|
||
FETCH(TT,A,BPXY)
|
||
PUSHJ P,PMOVX
|
||
PUSHJ P,PMOVY
|
||
MOVE A,L2
|
||
FETCH(TT,A,BPXY)
|
||
PUSHJ P,PMOVX
|
||
PUSHJ P,PMOVY
|
||
TRO MCHG!NEEDCL
|
||
POPJ P,
|
||
|
||
PNCHNG: PUSH P,TT ;NEW NAME FOR PIN #2
|
||
PUSH P,TTT ;PIN #2
|
||
EXCH T,A ;SO THAT T = PIN#1, A = NEW PIN NAME
|
||
PUSHJ P,STPNN1 ;SPREAD PIN# OVER NEW ID (SECOND)
|
||
POP P,A
|
||
POP P,T
|
||
TRO MCHG
|
||
JRST STPNN1 ;AND FIRST ONE
|
||
>;MD
|
||
;SAVE AND RESTORE FLAG REGISTER M
|
||
PUSHM: MOVE H,M ;SAVE COPY OF LH M
|
||
HRR H,0 ;AND RH 0
|
||
MD,< TLZE M,PINIDS!PLOCS ;TURN OFF PINS
|
||
TRO MCHG
|
||
TLON M,RPINID
|
||
TRO MCHG
|
||
>;MD
|
||
MPC,< TLON M,PLOCS ;TURN ON PINS
|
||
TRO MCHG
|
||
>;MD
|
||
POPJ P,
|
||
|
||
POPME: PUSHJ P,POPM
|
||
JRST PERRET
|
||
|
||
POPM:
|
||
MD,< TRNN H,TFLG
|
||
TRZA TFLG
|
||
TRO TFLG
|
||
TLNE H,PINIDS
|
||
TLOA M,PINIDS
|
||
CAIA
|
||
TRO MCHG
|
||
TLNE H,PLOCS
|
||
TLOA M,PLOCS
|
||
CAIA
|
||
TRO MCHG
|
||
TLNN H,RPINID
|
||
TLZA M,RPINID
|
||
>;MD
|
||
MPC,< TLNN H,PLOCS
|
||
TLZA M,PLOCS
|
||
>;MPC
|
||
POPJ P,
|
||
TRO MCHG
|
||
POPJ P,
|
||
|
||
READP:
|
||
MD,< PUSHJ P,READN >
|
||
MPC,< MOVE C,[PUSHJ P,GETLCH]
|
||
MOVEM C,GTCHRX
|
||
PUSHJ P,RPNAM
|
||
JRST CPOPJ1
|
||
>;MPC
|
||
CAIE C,12
|
||
JRST SCARF
|
||
MOVE B,T
|
||
JRST CPOPJ2
|
||
SUBTTL PLACE A BODY
|
||
BODPLC: TRNE INMOV
|
||
JRST PERRET
|
||
MD,< MOVEI T,[ASCIZ/TYPE BODY NAME
|
||
/] >
|
||
PUSHJ P,BODYGT ;GET BODY NAME & POINTER
|
||
POPJ P, ;ALTMODE
|
||
POPJ P, ;NULL
|
||
JRST OOPS1 ;NX
|
||
TRZ INMOV
|
||
MOVEM A,CURBOD ;SAVE POINTER TO TYPE
|
||
SETZM CURORT ;ZERO ORIENTATION
|
||
PUSHJ P,BPYES ;PLANT BODY
|
||
MOVE T,LSTBOD
|
||
PUSHJ P,SCLOSE
|
||
MOVE A,CLOSES
|
||
JRST BMOVEP ;START MOVING NEW BODY
|
||
|
||
;BPYES - PLANT BODY
|
||
;CURBOD = TYPE
|
||
;HSHFLG = 1 IF IN HASH BUCKET, ELSE JUST ON LIST
|
||
|
||
BPYESF: AOSA HSHFLG
|
||
BPYES: SETZM HSHFLG
|
||
MOVE A,CURBOD ;GET POINTER TO TYPE
|
||
MOVEI T,BODM
|
||
PUSHJ P,CHNGMD ;GO BACK TO BODY MODE
|
||
TRO MCHG
|
||
PUSHJ P,MAKBDY ;GET BODY BLOCK IN B
|
||
MOVEM B,LSTBOD ;SAVE POINTER
|
||
AOS F,BID ;GET A UNIQUE BODY ID
|
||
SKIPE HSHFLG
|
||
JRST BPYES1
|
||
MOVEI D,DBODPN
|
||
HRLM D,LSTBOD ;FOR CONSISTANCY SAKE
|
||
MOVE D,DBODPN ;GET BODY LIST POINTER
|
||
STORE (D,B,BNXT) ;PUT NEW ONE IN THE LIST
|
||
MOVEM B,DBODPN ;...
|
||
BPYES1: MOVE T,CURSE ;GET CURSOR POSITION
|
||
TDZ T,[1,,1] ;FOO ON INPUT!
|
||
STORE (T,B,BXY) ;STORE AS CENTER OF BODY
|
||
STORE (F,B,BID)
|
||
STORE (A,B,BTYP) ;DEPOSIT POINTER TO TYPE DEFINITION
|
||
MOVE F,CURORT ;GET ORIENTAION
|
||
MD,< ANDI F,7 >
|
||
MPC,< ANDI F,3 >
|
||
STORE (F,B,BORI) ;STORE ORIENTATION
|
||
;Now create all the POINTS on the BODY
|
||
MD,<
|
||
FETCH (A,A,TPIN) ;GET PIN/LOC LIST FROM TYPE
|
||
JUMPE A,CPOPJ
|
||
MOVEI C,RADDR(B,BLNK,BPLNK) ;LINK IN HERE
|
||
HRLI B,ISPIN
|
||
BLOPP1: FETCH(T,A,TPXY) ;POINT X,Y IN DEF
|
||
PUSHJ P,ORIENT
|
||
ADJUST(ADD,T,CURSE) ;TO BODY CENTER
|
||
PUSH P,T
|
||
PUSHJ P,PUTPNT ;CREATE THE POINT
|
||
POP P,T
|
||
STORE(T,D,BPXY) ;SET X,Y
|
||
STORE(D,C,BPLNK) ;ADD TO BODY POINT LIST
|
||
MOVE C,D
|
||
FETCH(A,A,TPNX) ;GET TO NEXT PIN
|
||
JUMPN A,BLOPP1 ;LOOP IF SOME LEFT
|
||
POPJ P,
|
||
>;MD
|
||
MPC,<
|
||
FETCH (A,A,TPIN) ;GET POINTER TO PINS
|
||
MOVEI C,RADDR(B,BLNK,BPLNK)
|
||
PUSH P,A
|
||
PUSHJ P,BLOPP2
|
||
SWITCH
|
||
POP P,A
|
||
PUSHJ P,BLOPP2
|
||
SWITCH
|
||
MOVEI T,ANGLPG
|
||
JRST HYDPOG
|
||
|
||
BLOPP2: JUMPE A,CPOPJ ;NONE?
|
||
HRLI B,ISPIN ;ISPIN,,BODY
|
||
BLOPP1: FETCH(T,A,TPXY)
|
||
PUSHJ P,ORIENT
|
||
ADJUST(ADD,T,CURSE) ;TO BODY CENTER
|
||
PUSH P,T
|
||
PUSHJ P,PUTPNT ;CREATE THE POINT (TYPIN IN A)
|
||
POP P,T
|
||
STORE(T,D,BPXY) ;SET X,Y
|
||
FETCH(TT,A,TPID) ;PIN # FROM DEF
|
||
MOVEI T,1 ;INITIALLY USE NORMAL PAD FOR PIN
|
||
CAIN TT,1 ;PIN 1?
|
||
MOVEI T,3 ;MAKE IT END UP PAD TYPE 3 (SQUARE)
|
||
STORE(T,D,BPPN)
|
||
STORE(D,C,BPLNK) ;LINK ONTO END OF BODY'S POINTS
|
||
MOVE C,D
|
||
FETCH(A,A,TPNX)
|
||
JUMPN A,BLOPP1 ;LOOP IF SOME LEFT
|
||
POPJ P,
|
||
>;MPC
|
||
SUBTTL MAKE BODY
|
||
|
||
;CONSTRUCT A BODY BLOCK, RETURN POINTER IN B
|
||
|
||
MAKBDY: PUSH P,A
|
||
GETBLK (B,BODY)
|
||
BCLEAR (A,B,BODY) ;JUST TO MAKE SURE
|
||
MOVEI A,V.BORI(B) ;SETUP DUMMY POINTERS
|
||
STORE (A,B,BOD1)
|
||
MOVEI A,V.BID(B)
|
||
STORE (A,B,BOD2)
|
||
MD,< MOVEI A,V.BBRS(B)
|
||
STORE(A,B,BOD3)
|
||
>;MD
|
||
JRST POPAJ
|
||
|
||
SUBTTL BODY AND DIP NAME STUFF SUBRS
|
||
MD,<
|
||
STODIP: PUSHJ P,GETCLS
|
||
JRST PERRET
|
||
FETCH(A,A,BTYP)
|
||
STTDIP: PUSHJ P,FNDIPT
|
||
TDZA T,T
|
||
FETCH(T,T,TXVAL)
|
||
JRST STODEF
|
||
|
||
STONAM: PUSHJ P,GETCLS
|
||
JRST PERRET
|
||
FETCH(A,A,BTYP)
|
||
STTNAM: FETCH(T,A,TNAM)
|
||
STODEF: PUSHJ P,SETTT
|
||
JUMPE T,ITSTUF
|
||
JRST STOTX0
|
||
>;MD
|
||
MPC,<
|
||
STODIP: PUSHJ P,GETCLS
|
||
JRST PERRET
|
||
FETCH(T,A,BNAM) ;DIP TYPE POINTER
|
||
STODEF: PUSHJ P,SETTT
|
||
JUMPE T,ITSTUF
|
||
JRST STOTX0
|
||
|
||
STONAM: PUSHJ P,GETCLS
|
||
JRST PERRET
|
||
FETCH(D,A,BTYP)
|
||
PUSHJ P,SETTT
|
||
PUSHJ P,STFNAM
|
||
JRST ITSTUF
|
||
|
||
STFNAM: FETCH(B,D,TNAM) ;# OF PADS
|
||
PUSHJ P,PUTTTN
|
||
FETCH(T,D,TNAM)
|
||
CAIE T,2 ;2 PIN DIP?
|
||
POPJ P,
|
||
PUTBYT 12 ;YES, GIVE SEPARATION
|
||
FETCH(T,D,TPIN)
|
||
FETCH(B,T,TPY) ;Y OF PIN1
|
||
FETCH(T,T,TPNX)
|
||
FETCH(C,T,TPY) ;Y OF PIN2
|
||
SUB B,C
|
||
MOVMS B
|
||
IMULI B,5 ;5 MILS PER POINT
|
||
ASH B,-1
|
||
JRST PUTTTN
|
||
>;MPC
|
||
SUBTTL COPY PINIDS TO PIN #'S -- TRANSPOSE -- BROT -- BODFIX
|
||
MD,<
|
||
BPINS: PUSHJ P,GETCLS
|
||
JRST PERRET
|
||
BPINS0: FETCH(A,A,BLNK) ;DEFAULT ALL PINS ON BODY
|
||
JUMPE A,CPOPJ
|
||
TLNE M,PLOCS
|
||
TRO MCHG
|
||
BPINS1: FETCH(B,A,BPLOC) ;PIN IN TYPE DEF
|
||
FETCH(T,B,TPNAM) ;DEFAULT PIN NAME
|
||
STORE(T,A,BPPN)
|
||
FETCH(A,A,BPLNK)
|
||
JUMPN A,BPINS1
|
||
POPJ P,
|
||
|
||
;SET ALL DIP PIN NUMBERS (SETPINS)
|
||
BPINSA: SKIPN C,DBODPN
|
||
JRST PERRET
|
||
BPNSA1: MOVE A,C
|
||
PUSHJ P,BPINS0
|
||
FETCH(C,C,BNXT)
|
||
JUMPN C,BPNSA1
|
||
POPJ P,
|
||
|
||
;CLEAR ALL DIP PIN NUMBERS (-SETPINS)
|
||
PINZ: SKIPN A,PONPNT
|
||
POPJ P,
|
||
TRO MCHG
|
||
PINZ1: FETCH(T,A,BPBIT)
|
||
TRNE T,ISPIN
|
||
CLEAR(A,BPPN)
|
||
FETCH(A,A,BPNXT)
|
||
JUMPN A,PINZ1
|
||
POPJ P,
|
||
|
||
NIL,<
|
||
;TRANSPOSE PIN NUMBERS FROM 14 PIN DIP TO 16 PIN SOCKET
|
||
;FOR "L" 12,1415 FOR "R" 11,1416
|
||
TRANSPOSE:
|
||
PUSHJ P,GETCLS
|
||
JRST PERRET
|
||
PUSHJ P,GETLR
|
||
JRST PERRET
|
||
GOTPOF: HLRZ B,(A)
|
||
HLRZ B,1(B)
|
||
MOVE T,1(B)
|
||
TLZ T,L1416!R1416
|
||
TDO T,C
|
||
MOVEM T,1(B)
|
||
TRO MCHG
|
||
POPJ P,
|
||
|
||
GETLR: TLNN M,DSKACT!MACACT
|
||
OUTSTR[ASCIZ/L, R, OR <CR>?/]
|
||
PUSHJ P,GETCHR
|
||
TLNN M,DSKACT!MACACT
|
||
OUTSTR[ASCIZ/
|
||
/]
|
||
CAIE C,"L"
|
||
JRST CKR
|
||
MOVSI C,L1416
|
||
JRST CPOPJ1
|
||
|
||
CKR: CAIE C,"R"
|
||
JRST CHKCR
|
||
MOVSI C,R1416
|
||
JRST CPOPJ1
|
||
|
||
CHKCR: CAIE C,12
|
||
POPJ P,
|
||
SETZ C, ;LET HIM CLEAR BITS
|
||
JRST CPOPJ1
|
||
>;NIL
|
||
;TRANSPOSE ALL BODIES OF A CERTAIN NAME
|
||
NIL,<
|
||
TRANALL:
|
||
MOVEI T,[ASCIZ/NAME OF BODY TO TRANSPOSE?/]
|
||
PUSHJ P,BODYGT
|
||
POPJ P, ;ALTMODE
|
||
POPJ P, ;NULL
|
||
JRST OOPS1
|
||
PUSHJ P,GETLR
|
||
JRST PERRET
|
||
MOVEM A,DY1 ;STUFF AWAY HERE FOR NOW
|
||
SKIPN A,DBODPN
|
||
POPJ P, ;NOTHING TO DO
|
||
TRANA1: HLRZ T,(A)
|
||
HRRZ T,1(T)
|
||
CAMN T,DY1 ;SAME BODY?
|
||
PUSHJ P,GOTPOF ;YES
|
||
HRRZ A,(A)
|
||
JUMPN A,TRANA1
|
||
POPJ P,
|
||
>;NIL
|
||
>;MD
|
||
|
||
BROT: TRNE INMOV
|
||
JRST [ MOVE A,CLOSES
|
||
JRST BROTA]
|
||
PUSHJ P,GETCLS
|
||
JRST PERRET
|
||
BROTA: FETCH(T,A,BORI)
|
||
ADDI T,1
|
||
MD,< ANDI T,7 >
|
||
MPC,< ANDI T,3 >
|
||
STORE(T,A,BORI)
|
||
TRO MCHG
|
||
MD,< FETCH(B,A,BLOC) ;ANY LOC SET ?
|
||
JUMPE B,BROTB
|
||
MOVE F,BLCROT(T) ;GET PROPER ROTATION NUMBER FROM TABLE
|
||
FETCH(T,A,BLXY)
|
||
PUSHJ P,ORIENT
|
||
STORE(T,A,BLXY)
|
||
BROTB:
|
||
>;MD
|
||
PUSHJ P,BODFIX
|
||
MD,< JRST STRAIGHTEN ;GO FIX THE WORLD NOW>
|
||
MPC,< POPJ P,>
|
||
|
||
MD,<
|
||
BLCROT: 7 ;7 - 0
|
||
1 ;0 - 1
|
||
1 ;1 - 2
|
||
1 ;2 - 3
|
||
7 ;3 - 4
|
||
1 ;4 - 5
|
||
1 ;5 - 6
|
||
1 ;6 - 7
|
||
>;MD
|
||
|
||
;CALL WITH POINTER TO BODY IN A
|
||
BODFIX: FETCH(B,A,BLNK)
|
||
JUMPE B,CPOPJ
|
||
FETCH(D,A,BXY)
|
||
FETCH(F,A,BORI)
|
||
BODFX2: FETCH(T,B,BPLOC)
|
||
FETCH(T,T,TPXY)
|
||
PUSHJ P,ORIENT
|
||
ADJUST(ADD,T,D)
|
||
MPC,< STORE(T,B,BPXY) >
|
||
MD,< PUSH P,A
|
||
PUSH P,F
|
||
MOVE A,B ;POINTER TO POINT MUST BE IN A
|
||
PUSHJ P,PMOVRL
|
||
POP P,F
|
||
POP P,A
|
||
>;MD
|
||
BODFX1: FETCH(B,B,BPLNK)
|
||
JUMPN B,BODFX2
|
||
POPJ P,
|
||
;GET PIN #'S FROM DIP DEF FILE
|
||
MD,<
|
||
SETSEC: PUSHJ P,GETCLS
|
||
JRST PERRET
|
||
PUSHJ P,GETDEF ;GET DEFINITION FROM DIPS.DIP
|
||
POPJ P, ;LOSE
|
||
SECAGN: TLNE M,DSKACT!MACACT
|
||
JRST SETSCP
|
||
OUTSTR[ASCIZ/SECTION # (0-/]
|
||
FETCH(T,H,DDMAX) ;GET # OF SECTIONS
|
||
PUSHJ P,DECOUT
|
||
OUTSTR[ASCIZ/)?/]
|
||
SETSCP: PUSHJ P,READN
|
||
CAIN C,ALTMOD
|
||
POPJ P, ;LET HIM OUT ON ALTMODE
|
||
CAIE C,12
|
||
JRST [ PUSHJ P,INNERR
|
||
JRST SECAGN]
|
||
;Enter here with sec# in T after having called GETDEF
|
||
;FALLS THRU
|
||
SETSCN: FETCH(TT,H,DDMAX)
|
||
CAMLE T,TT
|
||
JRST [ OUTSTR[ASCIZ/SECTION # TOO LARGE!
|
||
/]
|
||
JRST SECAGN]
|
||
MOVE B,T ;SAVE SEC #
|
||
MOVE T,[OUTCHR TTT]
|
||
MOVEM T,PUTCHR ;WHERE TO OUTPUT PIN NAME
|
||
MOVE D,TYPE ;BODY
|
||
MOVEI D,RADDR(D,BLNK,BPLNK)
|
||
JRST SETSC4
|
||
|
||
SETSC7: FETCH(A,D,BPLOC)
|
||
FETCH(A,A,TPNAM)
|
||
MOVEI TTT,RADDR(H,DDNXT,DPNXT) ;PREPARE TO SEARCH DEF LIST
|
||
STSC10: FETCH(TTT,TTT,DPNXT) ;DEFINITION MAKER MADE SURE THERE WERE ENOUGH PINS
|
||
JUMPE TTT,[STORE(A,D,BPPN) ;USE DEFAULT PIN NAME
|
||
TRO MCHG
|
||
TLNE M,DSKACT!MACACT
|
||
JRST SETSC4
|
||
OUTSTR[ASCIZ/DEFAULT PIN /]
|
||
PUSHJ P,BPINPN ;PRINT AS BODY PIN
|
||
OUTSTR[ASCIZ/ DOES NOT EXIST ON THIS DIP.
|
||
WILL USE DEFAULT PIN NAME.
|
||
/]
|
||
JRST SETSC4]
|
||
FETCH(T,TTT,DPNM)
|
||
CAME T,A ;CORRECT PIN NAME?
|
||
JRST STSC10 ;NO, KEEP LOOKING
|
||
FETCH(T,TTT,DPPIN) ;SECTION PIN NAME
|
||
JUMPE T,[STORE(A,D,BPPN) ;USE DEFAULT PIN NAME
|
||
TRO MCHG
|
||
TLNE M,DSKACT!MACACT
|
||
JRST SETSC4
|
||
OUTSTR[ASCIZ/DEFAULT PIN /]
|
||
PUSHJ P,BPINPN ;PRINT AS BODY PIN
|
||
OUTSTR[ASCIZ/, NO SECTION INFO, USING AS PIN #.
|
||
/]
|
||
JRST SETSC4]
|
||
FETCH(E,H,DDNXT) ;NOW FIND SAME PIN SECT # WITH CORRECT SECT BITS
|
||
SETSC5: FETCH(TTT,E,DPPIN) ;GET SECT PIN #
|
||
CAME T,TTT ;SAME AS OURS?
|
||
JRST SETSC6 ;NO
|
||
MOVN TTT,B ;GET NEG OF DESIRED SECTION
|
||
MOVEI TT,400000 ;GET BIT FOR SECTION 0
|
||
LSH TT,(TTT) ;POSITION TO CORRECT SECTION
|
||
FETCH(TTT,E,DPSEC) ;IN THIS SECTION?
|
||
TDNE TT,TTT ;TEST FOR THAT SECTION ON THIS PIN
|
||
JRST [ FETCH(TT,E,DPNM) ;YES, GET PIN NAME
|
||
STORE(TT,D,BPPN) ;AND STORE FOR THIS PIN
|
||
TRO MCHG ;THIS CHANGES THINGS
|
||
JRST SETSC4] ;TRY ANOTHER PIN
|
||
SETSC6: FETCH(E,E,DPNXT)
|
||
JUMPN E,SETSC5
|
||
OUTSTR[ASCIZ/DEFAULT PIN /]
|
||
PUSHJ P,BPINPN ;PRINT AS BODY PIN
|
||
OUTSTR[ASCIZ/, NOT IN THIS SECTION.
|
||
/]
|
||
SETSC4: FETCH(D,D,BPLNK)
|
||
JUMPN D,SETSC7
|
||
POPJ P,
|
||
|
||
;GETDEF - GET BODY DEF FROM DIPS.DIP FILE
|
||
|
||
SKPBDY: PUSHJ P,SKPBD2 ;SKIP PROPERTIES
|
||
SKPBD1: PUSHJ P,WORDIN ;SKIP PIN NAME
|
||
PUSHJ P,SKPSOM ;SKIP REG STUFF
|
||
PUSHJ P,WORDIN ;SKIP SECTS,,SECT PIN #
|
||
SOJG D,SKPBD1 ;SKIP THEM ALL
|
||
JRST SETSC1
|
||
|
||
SKPBD2: PUSHJ P,SKPSTR ;SKIP PACKAGE NAME
|
||
JFCL
|
||
SKPBD3: PUSHJ P,SKPSTR ;SKIP ALL PROPERTY NAMES
|
||
CAIA
|
||
JRST SKPBD3
|
||
|
||
; NOW SKIP RECURSIVELY NESTED <PROP-VAL,SUB-PROP-VAL,...>
|
||
|
||
MOVEI A,1 ;DEPTH
|
||
SKPTRE: PUSHJ P,SKPSTR
|
||
JRST [ SOJG A,SKPTRE
|
||
POPJ P,]
|
||
PUSHJ P,WORDIN ;SKIP VALUE BITS
|
||
AOJA A,SKPTRE
|
||
|
||
SKPSOM: PUSHJ P,WORDIN ;BITS,,PS#
|
||
PUSHJ P,WORDIN ;HI,,LOW LOADING
|
||
JRST WORDIN ;USE
|
||
|
||
;GETDEF - GET DIPDEF LIST FROM DIPS.DIP FILE
|
||
;A = BODY POINTER
|
||
;SETS UP DIP DEF TABLE, SKIP RETURNS IF ALL OK
|
||
;H = DIPDEF LIST PTR
|
||
|
||
GETDEF: HRRZM A,TYPE ;STORE BODY POINTER HERE
|
||
GETDF1: FETCH(H,A,BDEF) ;ALREADY IN?
|
||
JUMPN H,CPOPJ1
|
||
FETCH(H,A,BTYP) ;MAYBE ON TYPE
|
||
FETCH(H,H,TDEF)
|
||
JUMPN H,CPOPJ1
|
||
PUSHJ P,FNDDIP
|
||
JRST [OUTSTR [ASCIZ /NO DIPTYPE ON BODY!!
|
||
/]
|
||
POPJ P,]
|
||
GETBLK(H,GETDIP) ;PUT THIS BODY ON INPUT LIST
|
||
CLEAR(H,GNXT)
|
||
STORE(A,H,GBDY)
|
||
CLEAR(H,GFLAG) ;MARK AS BODY
|
||
JUMPGE T,GETDF2 ;DIPTYPE WAS ON BODY
|
||
FETCH(A,A,BTYP) ;FOUND DIPTYPE ON TYPE?
|
||
STORE(A,H,GBDY)
|
||
STOREL(T,H,GFLAG) ;THIS STUFF IS FOR TYPE
|
||
GETDF2: FETCH(T,T,TXVAL) ;VALUE OF "DIPTYPE"
|
||
STORE(T,H,GDIP)
|
||
MOVEM H,GETLST
|
||
PUSHJ P,DIPIN ;READ DIPDEF AND PACKAGE PROPS
|
||
JFCL
|
||
MOVE A,TYPE
|
||
FETCH(H,A,BDEF) ;ALREADY IN?
|
||
JUMPN H,CPOPJ1
|
||
FETCH(H,A,BTYP) ;MAYBE ON TYPE
|
||
FETCH(H,H,TDEF)
|
||
JUMPN H,CPOPJ1
|
||
POPJ P,
|
||
|
||
;INDIP - READIN PACKAGE AND DIPDEF STUFF FOR ALL TYPES
|
||
|
||
INDIP: SETZ H, ;LIST OF TYPES TO READIN
|
||
SKIPN G,BODPNT ;BODIES
|
||
POPJ P,
|
||
INDIP1: FETCH(T,G,TYP1) ;USED?
|
||
JUMPE T,INDIP9
|
||
MOVE A,G
|
||
PUSHJ P,FNDIPT ;ANY DIPTYPE?
|
||
JRST INDIP9
|
||
FETCH(T,T,TXVAL) ;THE DIPTYPE
|
||
FETCH(TT,T,TSASC)
|
||
CAMN TT,[ASCII /*/] ;FLUSH COMMENT DIPS
|
||
JRST INDIP9
|
||
GETBLK(A,GETDIP)
|
||
STORE(G,A,GBDY)
|
||
STORE(T,A,GDIP)
|
||
MOVEI T,400000
|
||
STORE(T,A,GFLAG) ;FLAG AS FROM TYPE
|
||
STORE(H,A,GNXT)
|
||
MOVE H,A
|
||
INDIP9: FETCH(G,G,TNXT)
|
||
JUMPN G,INDIP1
|
||
MOVEM H,GETLST
|
||
PUSHJ P,DIPIN
|
||
JFCL
|
||
POPJ P,
|
||
|
||
;DIPIN - READ DIPDEF AND PACKAGE STUFF FOR THIS LIST OF BODIES
|
||
;GETLST - LIST OF BODIES/TYPES TO GET FOR
|
||
;SKIPS IF GOT ALL THE BODIES
|
||
; (RECLAIMS GETLST AS IT GOES)
|
||
; PUTS DIPDEF LIST, PACKAGE CODE ON BODY IF IT HAD DIPTYPE,
|
||
; ELSE PUTS STUFF ON TYPE, COMPLAINS ABOUT UPDATING PACKAGE CODE
|
||
; ON LIBRARY TYPE.
|
||
|
||
DIPIN: PUSHJ P,PUSHIT
|
||
PUSHJ P,DIPRED
|
||
JFCL
|
||
DIPIN3: SKIPN G,GETLST
|
||
JRST [ PUSHJ P,POPIT
|
||
JRST CPOPJ1]
|
||
OUTSTR [ASCIZ /NOT ALL DIPS FOUND! /]
|
||
DIPIN4: FETCH(T,G,GDIP)
|
||
PUSHJ P,OUTTXT
|
||
OUTSTR [ASCIZ /, /]
|
||
FETCH(G,G,GNXT)
|
||
JUMPN G,DIPIN4
|
||
OUTSTR [ASCIZ /
|
||
/]
|
||
MOVE B,GETLST
|
||
PUSHJ P,PUTFS
|
||
PUSHJ P,POPIT
|
||
POPJ P,
|
||
|
||
;DIPMAP - SET THE NAME OF THE DIPS.DIP FILE TO USE
|
||
|
||
STORAGE(IMPURE)
|
||
DIPFNM: 0
|
||
DIPEXT: 0
|
||
DIPPPN: 0
|
||
STORAGE(PURE)
|
||
|
||
CLRDPF: SETZM DIPFNM
|
||
POPJ P,
|
||
|
||
SETDIP: TLNN M,DSKACT!MACACT
|
||
OUTSTR[ASCIZ/New DIPs /]
|
||
MOVSI T,EXTDIP
|
||
PUSHJ P,SETNAM
|
||
POPJ P,
|
||
ENTPPN
|
||
MOVE B,FILNAM
|
||
MOVEM B,DIPFNM
|
||
HLLZ C,FILEXT
|
||
MOVEM C,DIPEXT
|
||
MOVE D,FILPPN
|
||
MOVEM D,DIPPPN
|
||
POPJ P,
|
||
|
||
;DIPRED - READ A DIP DEF LIST FROM DIPS.DIP FILE
|
||
;GETLST = LIST OF BODIES/TYPES (AND THEIR DIPTYPES) TO SEARCH FOR
|
||
;SKIPS IF DIPS.DIP FILE FOUND OK
|
||
; (REMOVES ENTRIES ON GETLST AS IT FINDS THEM)
|
||
; (CHECKS FOR UPDATING PACKAGE CODE ON LIBRARY TYPES)
|
||
|
||
DIPRED: MOVEM P,PERRSAV ;RETURN UP FROM HERE
|
||
INIT DAT,10
|
||
'DSK '
|
||
IOHD
|
||
JRST [ OUTSTR [ASCIZ/CAN'T GET DISK!
|
||
/]
|
||
JRST SECLEV]
|
||
MOVEI T,IOBUF ;USE COMPILED IN BUFFER
|
||
EXCH T,.JBFF
|
||
INBUF DAT,2
|
||
MOVEM T,.JBFF
|
||
SKIPN T,DIPFNM ;ANY MAPPING SET?
|
||
MOVE T,['NDIPS '] ;NO, USE DEFAULT
|
||
MOVEM T,FILNAM
|
||
MOVSI T,EXTDIP
|
||
SKIPE DIPFNM
|
||
HLLZ T,DIPEXT
|
||
MOVEM T,FILEXT
|
||
SETZB T,FILDAT
|
||
NODEC,<
|
||
NOSTAN,<
|
||
DSKPPN T, ;TRY HIS PPN FIRST
|
||
TLOA A,400000
|
||
>;NOSTAN
|
||
>;NODEC
|
||
SKIPE DIPFNM
|
||
MOVE T,DIPPPN
|
||
DIPRD2: MOVE T,LIBPPN
|
||
MOVEM T,FILPPN
|
||
DIPRD: TLNE M,DSKACT!MACACT
|
||
JRST DIPRD1
|
||
OUTSTR [ASCIZ/READING /]
|
||
PUSH P,A
|
||
HRRI A,FILNAM
|
||
JSR FPRINT
|
||
POP P,A
|
||
OUTSTR[ASCIZ/
|
||
/]
|
||
DIPRD1: MOVE T,FILPPN
|
||
LOOKUP DAT,FILNAM
|
||
JRST [ PUSHJ P,LOOKER
|
||
NODEC,< TLZE A,400000 ;WAS THIS LIBRARY?
|
||
JRST DIPRD2 ;NO, TRY LIBRARY
|
||
>;NODEC
|
||
OUTSTR[ASCIZ/TRY ANOTHER DIPS.DIP FILE /]
|
||
MOVSI T,EXTDIP
|
||
PUSHJ P,SETNAM
|
||
JRST SECLEV
|
||
SETZ A,
|
||
JRST DIPRD]
|
||
DEC,< JSR DAT,LOOKCK >
|
||
MOVEM T,FILPPN
|
||
PUSHJ P,WORDIN
|
||
MOVN TTT,TTT
|
||
CAIE TTT,DIPVER ;CORRECT VERSION?
|
||
JRST [ OUTSTR[ASCIZ/WRONG VERSION DIP DEFINITION FILE.
|
||
/]
|
||
JRST SECLEV]
|
||
;Scan thru file, inputing dips on GETLST
|
||
SETSC1: SKIPN G,GETLST ;STUFF TO GET FOR
|
||
JRST SECWIN
|
||
PUSHJ P,WORDIN
|
||
JUMPE TTT,SECWIN ;DONE!
|
||
MOVE D,TTT ;SAVE # OF PINS HERE
|
||
PUSHJ P,RSTR ;NEXT DIP NAME
|
||
JFCL
|
||
MOVEM T,TYPNAM
|
||
SETSE2: MOVE A,TYPNAM
|
||
FETCH(B,G,GDIP)
|
||
JUMPE B,SETSE1 ;DIDN'T HAVE DIPTYPE
|
||
PUSHJ P,TXTMAT
|
||
CAIA
|
||
JRST SETSC0 ;THIS IS THE DIP WE'RE GETTING FOR
|
||
SETSE1: FETCH(G,G,GNXT)
|
||
JUMPN G,SETSE2
|
||
MOVE B,TYPNAM ;THIS ISN'T ONE WE'RE LOOKING FOR
|
||
PUSHJ P,PUTFS ;RETURN DIP TYPE
|
||
JRST SKPBDY ; SKIP THIS ONE
|
||
|
||
SETSC0: GETBLK(H,DDEF)
|
||
STORE(D,H,DDNPN) ;SAVE # PINS DEFINED
|
||
CLEAR(H,DDMAX) ;MAX SEC #
|
||
PUSHJ P,RSTR ;GET PACKAGE NAME
|
||
JFCL
|
||
MOVEM T,PKGTEM
|
||
MOVEI E,RADDR(H,DDNXT,DPNXT)
|
||
PUSHJ P,SKPBD3 ;SKIP PROP STUFF
|
||
SETSC2: PUSHJ P,WORDIN ;PIN NAME
|
||
PUSH P,TTT
|
||
PUSHJ P,SKPSOM ;SKIP BORING STUFF
|
||
PUSHJ P,WORDIN ;SECT BITS,,SECT PIN #
|
||
GETBLK(T,DIPDEF)
|
||
STORE(T,E,DPNXT)
|
||
CLEAR(T,DPNXT)
|
||
MOVE E,T
|
||
POP P,T
|
||
STORE(T,E,DPNM)
|
||
STORE(TTT,E,DPPIN)
|
||
HLRZ T,TTT
|
||
STORE(T,E,DPSEC)
|
||
HLLZS TT,TTT
|
||
SUBI TT,1
|
||
XOR TT,TTT
|
||
JFFO TT,SETSC8 ;THIS FINDS RIGHTMOST BIT FROM TTT
|
||
JRST SETSC3 ;NO BITS
|
||
|
||
SETSC8: FETCH(T,H,DDMAX)
|
||
CAMLE TTT,T
|
||
STORE(TTT,H,DDMAX) ;STORE MAX SO FAR!
|
||
SETSC3: SOJG D,SETSC2
|
||
MOVEM H,DEFLST
|
||
SETZM PKGCOD
|
||
SKIPN T,PKGTEM ;ANY PACKAGE PROP?
|
||
JRST SECPT1
|
||
PUSHJ P,MATPAK ;LOOKUP PACKAGE TYPE
|
||
JRST [ OUTSTR [ASCIZ /PACKAGE TYPE I DON'T KNOW ABOUT!! /]
|
||
MOVE T,PKGTEM
|
||
PUSHJ P,OUTTCR
|
||
JRST SECPT1]
|
||
MOVEM A,PKGCOD
|
||
SECPT1: MOVEI G,GETLST-V.GNXT
|
||
SECPT0: MOVE H,G ;SAVE BACK POINTER
|
||
FETCH(G,G,GNXT)
|
||
JUMPE G,SECPT9
|
||
FETCH(A,G,GDIP) ;UPDATE ALL TYPES/BODIES WITH THIS DIPTYPE
|
||
MOVE B,TYPNAM
|
||
PUSHJ P,TXTMAT
|
||
JRST SECPT0
|
||
;store DIPDEF list on TYPE/BODY, check package code
|
||
FETCH(A,G,GFBDY) ;FLAG AND BODY/TYPE POINTER
|
||
MOVE B,DEFLST ;SETUP DIP DEF LIST IN ALL
|
||
MOVE C,PKGCOD
|
||
JUMPL A,SECPTT ;STUFF GOES ON TYPE
|
||
PUSHJ P,COPDEF ;MAKE COPY OF DIPDEF LIST
|
||
STORE(B,A,BDEF)
|
||
FETCH(T,A,BPAK)
|
||
CAMN C,T ;CHANGE PACKAGE?
|
||
JRST SECPT2 ;THIS GETLST ENTRY SATISFIED, DELETE
|
||
STORE(C,A,BPAK)
|
||
MOVEI T,CPAKAG
|
||
PUSHJ P,RECMPB ;YES, BUT MIGHT BE SUPERCEEDED BY EXPLICIT PROP
|
||
TRO MCHG
|
||
JRST SECPT2 ;THIS GETLST ENTRY SATISFIED, DELETE
|
||
|
||
SECPTT: PUSHJ P,COPDEF
|
||
STORE(B,A,TDEF)
|
||
FETCH(T,A,TPAK)
|
||
CAMN C,T ;CHANGE PACKAGE?
|
||
JRST SECPT2
|
||
FETCH(TT,A,TLIB) ;LIBRARY BODY?
|
||
SKIPN MODLIB
|
||
JUMPN TT,[OUTSTR [ASCIZ /PACKAGE WRONG ON LIBRARY BODY! /]
|
||
FETCH(T,A,TNAM)
|
||
PUSHJ P,OUTTCR
|
||
JRST SECPT2]
|
||
STORE(C,A,TPAK)
|
||
MOVEI T,CPAKAG
|
||
PUSHJ P,RECMPT ;BUT MIGHT HAVE EXPLICIT PACKAGE
|
||
TRO MCHG
|
||
FETCH(T,A,TPAK)
|
||
CAMN T,C
|
||
JRST SECPT2
|
||
OUTSTR [ASCIZ /TYPE HAS DIFFERENT PACKAGE THAN DIPS.DIP! /]
|
||
FETCH(T,A,TNAM)
|
||
PUSHJ P,OUTTXT
|
||
SECPT2: FETCH(T,G,GNXT)
|
||
STORE(T,H,GNXT)
|
||
RETBLK(G,GETDIP)
|
||
MOVE G,H ;BACKUP
|
||
JRST SECPT0
|
||
|
||
SECPT9: MOVE B,TYPNAM
|
||
PUSHJ P,PUTFS
|
||
MOVE B,PKGTEM
|
||
PUSHJ P,PUTFS
|
||
MOVE B,DEFLST
|
||
PUSHJ P,PUTFS
|
||
JRST SETSC1 ;GET SOME MORE DIPS
|
||
|
||
SECWIN: RELEASE DAT, ;RELEASE DEF FILE
|
||
JRST CPOPJ1 ;GIVE WIN RETURN
|
||
|
||
SECLEV: RELEASE DAT,
|
||
POPJ P,
|
||
;DDFREL - RECLAIM DIP DEF LIST
|
||
;C = DIP DEF LIST
|
||
|
||
DDFREL: JUMPE C,CPOPJ
|
||
FETCH(T,C,DDNXT)
|
||
RETBLK(C,DDEF)
|
||
DDFRL1: JUMPE T,CPOPJ
|
||
MOVE C,T
|
||
FETCH(T,T,DPNXT)
|
||
RETBLK(C,DIPDEF)
|
||
JRST DDFRL1
|
||
|
||
;COPDEF - COPY DIPDEF LIST
|
||
;B = LIST
|
||
|
||
COPDEF: JUMPE B,CPOPJ
|
||
PUSH P,C
|
||
PUSH P,D
|
||
GETBLK(C,DDEF)
|
||
FETCH(T,B,DDNPN)
|
||
STORE(T,C,DDNPN)
|
||
FETCH(T,B,DDMAX)
|
||
STORE(T,C,DDMAX)
|
||
MOVEI D,RADDR(C,DDNXT,DPNXT)
|
||
COPDF1: FETCH(B,B,DPNXT)
|
||
JUMPE B,COPDF2
|
||
MOVE T,D
|
||
GETBLK(D,DIPDEF)
|
||
STORE(D,T,DPNXT)
|
||
FOR I IN (DPNM,DPSEC,DPPIN)
|
||
< FETCH(T,B,I)
|
||
STORE(T,D,I)
|
||
>
|
||
JRST COPDF1
|
||
|
||
COPDF2: CLEAR(D,DPNXT)
|
||
MOVE B,C
|
||
POP P,D
|
||
POP P,C
|
||
POPJ P,
|
||
|
||
>;MD
|
||
SUBTTL SET BODY LOCATION
|
||
BNUMS: PUSHJ P,GETCLS
|
||
JRST PERRET
|
||
MOVEM A,CURBOD
|
||
MOVE T,[PUSHJ P,GETLCH]
|
||
MOVEM T,GTCHRX
|
||
TLNE M,DSKACT!MACACT
|
||
JRST BNUMS1
|
||
OUTSTR [ASCIZ / Body location as "/]
|
||
OUTSTR @BODCUE
|
||
OUTSTR [ASCIZ /"? /]
|
||
BNUMS1: PUSHJ P,GTSLTL
|
||
JRST INNERR
|
||
JRST [ CAIE C,12
|
||
JRST INNERR
|
||
MPC,< MOVE A,CURBOD
|
||
CLEAR(A,BLN) ;CLEAR LOCN
|
||
TRO MCHG
|
||
POPJ P, ]
|
||
>;MPC
|
||
MD,< MOVE A,CURBOD
|
||
FETCH(B,A,BLOC)
|
||
JUMPE B,CPOPJ
|
||
CLEAR(A,BLOC)
|
||
FETCH (T,A,BBIT)
|
||
TRO T,FIXLOC!FIXBLO
|
||
STORE (T,A,BBIT)
|
||
TLNE M,BLOCS
|
||
TRO MCHG
|
||
TRNE TMOVE!LMOVE ;IF WE WERE MOVING OFFSET,
|
||
TRZN INMOV ;THEN STOP AND FIND CLOSEST AGAIN
|
||
POPJ P,
|
||
TRO NEEDCL
|
||
POPJ P, ]
|
||
MD,< JFCL > ;WE DON'T CARE IF THERE WAS A BRS OR NOT
|
||
SETO T, ;ASSUME NO SEC STUFF
|
||
CAIE C,"-" ;SETTING SECTION #?
|
||
JRST SECNUM
|
||
PUSHJ P,GETLIN ;YES, GET IT
|
||
CAIL C,"A"
|
||
CAILE C,"Z"
|
||
JRST [ CAIL C,"0" ;ACCEPT NUMERIC SECTIONS TOO!
|
||
CAILE C,"9"
|
||
JRST INNERR
|
||
PUSHJ P,CREADN
|
||
JRST SECNUM ]
|
||
MOVEI T,-"A"(C)
|
||
PUSHJ P,GETLIN
|
||
SECNUM: MOVEM T,NUMBER ;SAVE SECTION # HERE
|
||
>;MD
|
||
CAIE C,12 ;NOW IT MUST BE A LF
|
||
JRST INNERR
|
||
MD,< MOVE TT,LETTER
|
||
TLNE TT,-1
|
||
SKIPN T,CRDLOC
|
||
JRST NOGLOB
|
||
XOR T,TT
|
||
TLNE T,-1
|
||
JRST [ OUTSTR[ASCIZ/SORRY, CAN'T CHANGE CARD LOC WHILE GLOBAL CARD LOC IS IN FORCE!
|
||
/]
|
||
JRST CHKSCN] ;GO CHECK SECTION ANYWAY
|
||
HRRZS LETTER
|
||
NOGLOB:
|
||
>;MD
|
||
;FALLS THRU - PC
|
||
|
||
MPC,< MOVE T,LETTER
|
||
STORE(T,A,BLN) ;STORE IT
|
||
>;MPC
|
||
MD,< FETCH(B,A,BLOC)
|
||
JUMPN B,GTNMBK ;DO WE HAVE A BLOCK ALREADY?
|
||
MOVEI B,-1+ADDR(A,BLXY) ;NO
|
||
STORE(B,A,BLOC) ;MARK AS LOCN SET
|
||
CLEAR(A,BLO) ;CLEAR CHARACTER OFFSET
|
||
FETCH(TT,A,BBIT)
|
||
TRO TT,FIXBLO ;DEFAULT IS RECENTER LOCATION TEXT
|
||
STORE(TT,A,BBIT)
|
||
PUSHJ P,STLCOF ;SET LOCATION OFFSET FROM TYPE DEF
|
||
GTNMBK: HLRZ T,LETTER
|
||
STORE(T,A,BBRS) ;SET BAY-RACK-SLOT
|
||
HRRZ T,LETTER
|
||
STORE(T,A,BSOC) ;SET SOCKET
|
||
MOVE T,CURBOD ;SETUP T FOR OFFBLO
|
||
PUSHJ P,OFFBLO ;CHECK FOR RECALC CHAR OFFSET
|
||
>;MD
|
||
TLNE M,BLOCS
|
||
TRO MCHG
|
||
MPC,< POPJ P, >
|
||
MD,<
|
||
CHKSCN: SKIPGE NUMBER ;ANY SECTION #?
|
||
POPJ P,
|
||
MOVE A,CURBOD
|
||
PUSHJ P,GETDEF
|
||
POPJ P, ;LOSE
|
||
MOVE T,NUMBER
|
||
JRST SETSCN ;TRY TO SET SECTION!
|
||
|
||
;OFFSET BODY LOCNS
|
||
|
||
OFFLOC: SKIPN H,DBODPN
|
||
POPJ P,
|
||
OFFLC1: HRRZ A,H
|
||
FETCH(B,A,BLOC) ;ANY LOC SET??
|
||
JUMPE B,OFFLC2 ;ANY?
|
||
PUSHJ P,STLCOF ;YES, SET TO FOLLOW DEFINITION
|
||
SETBIT(FIXBLO,TT,H,BBIT) ;CAUSE LOC TEXT TO BE AUTO CENTERED
|
||
MOVE T,H
|
||
PUSHJ P,OFFBLO ;OFFSET TEXT MAYBE
|
||
OFFLC2: HRRZ H,(H)
|
||
JUMPN H,OFFLC1
|
||
TLNE M,BLOCS
|
||
TRO MCHG
|
||
POPJ P,
|
||
|
||
;RESET LOCATION OFFSET OF CLOSEST BODY TO DEFAULT
|
||
BLCOFF: PUSHJ P,GETCLS
|
||
JRST PERRET
|
||
MOVEM A,CURBOD ;SAVE BODY HERE FOR OFFBLO
|
||
FETCH(B,A,BLOC) ;ANY LOCN SET?
|
||
JUMPE B,CPOPJ ;LEAVE IF NONE
|
||
TLNE M,BLOCS
|
||
TRO MCHG
|
||
PUSHJ P,STLCOF ;SET OFFSET
|
||
HRRZ T,CURBOD
|
||
SETBIT(FIXBLO,TT,T,BBIT) ;AND DEFAULT IS AUTO CENTER
|
||
JRST OFFBLO
|
||
|
||
;STLCOF - SET LOCN TEXT POSITION FROM TYPE DEFINITION
|
||
; A = BODY PTR
|
||
STLCOF: PUSH P,T
|
||
PUSH P,TT
|
||
FETCH(TT,A,BTYP) ;TYPE
|
||
FETCH(T,TT,TXY) ;DEFAULT LOCN TEXT X,Y
|
||
FETCH(F,A,BORI) ;ORIENTATION
|
||
PUSHJ P,ORIENT ;ADJUST T FOR ROTATION IN F
|
||
STORE(T,A,BLXY) ;SET LOCN TEXT X,Y
|
||
FETCH(T,A,BBIT)
|
||
TRO T,FIXLOC ;CONTINUE FIXING OFFSET LOCN
|
||
STORE(T,A,BBIT)
|
||
POP P,TT
|
||
POP P,T
|
||
POPJ P,
|
||
|
||
>;MD
|
||
|
||
STOBLC: PUSHJ P,GETCLS
|
||
JRST PERRET
|
||
MOVE B,A
|
||
PUSHJ P,SETTT
|
||
MD,< FETCH(D,B,BLOC) ;ANY LOC SET?
|
||
JUMPE D,ITSTUF
|
||
PUSH P,A
|
||
FETCH(A,B,BRSLOC)
|
||
>;MD
|
||
MPC,< FETCH(D,B,BLN)
|
||
JUMPE D,ITSTUF
|
||
PUSH P,A
|
||
MOVE A,D
|
||
>;MPC
|
||
PUSHJ P,SLTLPN
|
||
POP P,A
|
||
JRST ITSTUF
|
||
|
||
;BODY LOCATION OFFSET (D)
|
||
|
||
MD,<
|
||
;RESET LOCATION OFFSET OF CLOSEST BODY TO DEFAULT
|
||
BLOOFF: PUSHJ P,GETCLS
|
||
JRST PERRET
|
||
FETCH(B,A,BLOC) ;ANY LOC SET?
|
||
JUMPE B,CPOPJ ;LEAVE IF NONE
|
||
SETBIT(FIXBLO,TT,A,BBIT)
|
||
MOVE T,A
|
||
;FALLS THRU
|
||
;OFFBLO - CHAR OFFSET FOR BODY LOCN TEXT
|
||
;T = POINTER TO BODY
|
||
|
||
OFFBLO: FETCHL(TT,T,BBIT)
|
||
TLNN TT,FIXBLO
|
||
POPJ P, ;NOT BEING FIXED
|
||
TLNE M,BLOCS
|
||
TRO MCHG
|
||
TLNN TT,FIXLOC ;DON'T FOLLOW BODY DEF OFFSET UNLESS FOLLOWING BODY DEF LOC
|
||
JRST OFFBL1
|
||
FETCH(TT,T,BTYP)
|
||
FETCH(TTT,TT,TYP3) ;CHARACTER OFFSET IN TYPE DEF?
|
||
JUMPE TTT,OFFBL1 ; NO
|
||
FETCH(TTT,TT,TOXY)
|
||
STORE(TTT,T,BLO) ;YES, USE IT
|
||
POPJ P,
|
||
|
||
OFFBL1: SETZM CHRCNT
|
||
PUSH P,PUTCHR
|
||
PUSH P,T
|
||
MOVE TTT,[AOS CHRCNT]
|
||
MOVEM TTT,PUTCHR
|
||
FETCH(A,T,BRSLOC) ;B-R-S,,BSOC
|
||
PUSHJ P,SLTLPN
|
||
POP P,T
|
||
POP P,PUTCHR
|
||
MOVN A,CHRCNT
|
||
MOVE TTT,STDBIG
|
||
IMUL A,VIRPTX(TTT)
|
||
ASH A,-1
|
||
STORE(A,T,BLOX) ;X PART OF OFFSET
|
||
MOVN A,VIRPTY(TTT)
|
||
ASH A,-1
|
||
STORE(A,T,BLOY)
|
||
POPJ P,
|
||
>;MD
|
||
SUBTTL DELETE BODY
|
||
C2BDEL: SETOM PINLEV
|
||
PUSHJ P,GETCLS
|
||
POPJ P,
|
||
MOVE B,CLAST
|
||
TRO NEEDCL
|
||
JRST BCLR1
|
||
|
||
BODDEL: PUSHJ P,GETCLS ;ANY TO DELETE?
|
||
JRST PERRET ;NO
|
||
MOVE B,CLAST
|
||
TRO NEEDCL
|
||
BDELET: SETZM PINLEV
|
||
BCLR1: PUSH P,B ;SAVE LAST
|
||
TRZE INMOV ;TURN OFF MOVING
|
||
TRO NEEDCL
|
||
ROUTE,<MPC,<TLZ M,%ROUTE>> ;MAKE HIM ROUTE AGAIN
|
||
PUSHJ P,REMBOD ;REMOVE BODY FROM ANY SETS
|
||
TRO TFLG!MCHG ;DELETE PINS
|
||
PUSH P,A ;SAVE THIS
|
||
SKIPN PINLEV ;LEAVING PINS AS POINTS?
|
||
JRST [ MOVEI B,PONPNT ;NO, DELETING
|
||
PUSHJ P,BODDLP ;DELETE ALL PINS WHICH POINT TO THIS BODY
|
||
MPC,< MOVEI B,PONPN2
|
||
PUSHJ P,BODDLP
|
||
>;MPC
|
||
JRST BODDLE] ;NOW GIVE BACK BODY
|
||
FETCH(B,A,BLNK)
|
||
JUMPE B,BODDLE
|
||
BODDL2: FETCH(A,B,BPLNK)
|
||
PUSHJ P,PINPNT ;CHANGE BPIN INTO POINT !!!
|
||
MOVE B,A
|
||
BODDL1: JUMPN B,BODDL2
|
||
BODDLE: POP P,A ;HERE WE GIVE BACK THE BODY
|
||
FETCH(F,A,BNXT) ;GET POINTER TO NEXT BODY
|
||
POP P,B ;RESTORE LAST POINTER
|
||
STORE(F,B,BNXT) ;LINK AROUND
|
||
MD,< FETCH(C,A,BTXT)
|
||
PUSHJ P,TXTREL ;RELEASE PROPERTIES
|
||
FETCH(C,A,BDEF)
|
||
PUSHJ P,DDFREL
|
||
>;MD
|
||
RETBLK(A,BODY)
|
||
POPJ P,
|
||
|
||
BODDLQ: FETCHL(T,B,PBIT)
|
||
TLNN T,ISPIN
|
||
JRST BODDLP
|
||
FETCH(T,B,BBODY)
|
||
CAME T,-1(P) ;THIS IS WHERE BODY POINTER WAS STORED
|
||
JRST BODDLP ;TRY ANOTHER
|
||
PUSH P,A ;SAVE LAST POINTER
|
||
TRO TFLG ;ALLOW DELETE PIN
|
||
PUSHJ P,DELPNT ;DELETE (CURRENT AND LAST ALREADY SETUP)
|
||
POP P,B
|
||
BODDLP: MOVE A,B ;SAVE LAST
|
||
FETCH(B,B,PNXT)
|
||
JUMPN B,BODDLQ
|
||
POPJ P,
|
||
|
||
|
||
SUBTTL BODY RENAME
|
||
MD,<
|
||
BODREN: MOVEI T,[ASCIZ/TYPE BODY NAME.
|
||
/]
|
||
PUSHJ P,BODYGT
|
||
POPJ P, ;ALTMODE
|
||
POPJ P, ;NULL
|
||
JRST OOPS1 ;NX
|
||
SKIPE MODLIB ;ALLOW MODIFICATION?
|
||
JRST RENOK
|
||
FETCH(T,A,TLIB)
|
||
JUMPE T,RENOK
|
||
OUTSTR[ASCIZ/CAN'T RENAME LIBRARY BODY!
|
||
/]
|
||
POPJ P,
|
||
|
||
RENOK: MOVEI T,[ASCIZ/TYPE NEW BODY NAME.
|
||
/]
|
||
PUSH P,A
|
||
PUSHJ P,BODYGT
|
||
JRST RENOKB ;ALTMODE
|
||
JRST RENOKB ;NULL
|
||
JRST RENOKA ;NX
|
||
OUTSTR[ASCIZ/NAME ALREADY IN USE!!!
|
||
/]
|
||
RENOKB: POP P,(P)
|
||
POPJ P,
|
||
|
||
RENOKA: POP P,C ;BODY TO RENAME
|
||
MOVE D,B
|
||
FETCH(B,C,TNAM)
|
||
PUSHJ P,PUTFS
|
||
STORE(D,C,TNAM)
|
||
TLNE M,%IDENT ;DISPLAYING NAMES?
|
||
TRO MCHG ;YES, REFRESH
|
||
POPJ P,
|
||
>;MD
|
||
SUBTTL GET BODY
|
||
;BODYGT - FIND BODY USER ASKS FOR
|
||
;T = PROMPT STRING
|
||
;RETURNS
|
||
; Alt
|
||
; Null string
|
||
; Not found
|
||
; Body found
|
||
;A = POINTER TO TYPE (previous in LH)
|
||
;(B = NAME STRING IF BODY NOT FOUND)
|
||
|
||
MD,<
|
||
BODYGT: TLNN M,DSKACT!MACACT
|
||
OUTSTR (T)
|
||
SETZ A, ;IN CASE NO NAME
|
||
PUSHJ P,TREADU ;READ IN THE TEXT FOR THE BODY NAME
|
||
POPJ P, ;ALTMODE
|
||
JRST CPOPJ1 ;NULL STRING
|
||
AOS (P)
|
||
AOS (P) ;AT LEAST 2 SKIPS
|
||
MOVEI A,BODPNT-V.TNXT
|
||
JRST BLOP2
|
||
|
||
BLOP1: PUSH P,A
|
||
PUSH P,B ;BODY'S NAME
|
||
FETCH(A,A,TNAM) ;GET POINTER TO STRING
|
||
PUSHJ P,TXTMAT
|
||
JRST BLOP3 ;NO MATCH
|
||
POP P,B
|
||
POP P,A
|
||
PUSHJ P,PUTFS ;RETURN STRING
|
||
FETCH(T,A,TYP1) ;NON-ZERO IF BODY IN
|
||
JUMPE T,BDYGET ;GET BODY FROM LIBRARY IF NOT ALL IN
|
||
HRRZS A ;CLEAR PREVIOUS LINK
|
||
JRST CPOPJ1 ;FOUND
|
||
|
||
BLOP3: POP P,B ;YES, MATCH, RESTORE B
|
||
POP P,A ;RESTORE A, THE POINTER TO THE FOUND BODY
|
||
BLOP2: MOVE T,A
|
||
FETCH(A,A,TNXT) ;GO TO NEXT BODY
|
||
HRL A,T ;SAVE OLD IN LH FOR BDYGET
|
||
TRNE A,-1
|
||
JRST BLOP1 ;LOOP IF ANY LEFT TO COMPARE WITH
|
||
POPJ P, ;ELSE LEAVE
|
||
>;MD
|
||
|
||
MPC,<
|
||
BODYGT: TLNN M,DSKACT!MACACT
|
||
OUTSTR [ASCIZ /NO. OF PINS?
|
||
/]
|
||
SETZ A, ;THIS IS "NO" ANSWER
|
||
PUSHJ P,READN ;READ IN THE TEXT FOR THE BODY NAME
|
||
CAIN C,ALTMOD
|
||
POPJ P,
|
||
JUMPE T,[ CAIN C,12 ;JUST BLANK?
|
||
JRST CPOPJ1 ;LET HIM OUT
|
||
CAIN C,"R"
|
||
MOVEI T,=400/5
|
||
CAIN C,"C"
|
||
MOVEI T,=300/5
|
||
CAIN C,"T"
|
||
MOVEI T,3
|
||
PUSHJ P,GETLIN
|
||
CAIE C,12
|
||
JRST INNERR
|
||
JUMPE T,INNERR
|
||
CAIE T,3 ;3 PIN DIP?
|
||
JRST IS2PIN ;NO, 2 PIN AND WE HAVE SEPERATION
|
||
JRST BLOP0]
|
||
CAIE C,12
|
||
JRST INNERR
|
||
CAIN T,2 ;2 PIN DIP?
|
||
JRST ASKWID
|
||
BLOP0: MOVE A,BODPNT ;GET POINTER TO THE STRING OF BODIES
|
||
AOS (P)
|
||
AOS (P)
|
||
BLOP1: JUMPE A,CPOPJ ;DOESN'T EXIST
|
||
FETCH(TT,A,TNAM)
|
||
CAIN TT,(T)
|
||
JRST CPOPJ1 ;EXISTS
|
||
FETCH(A,A,TNXT)
|
||
JRST BLOP1
|
||
|
||
|
||
ASKWID: TLNN M,DSKACT!MACACT
|
||
OUTSTR[ASCIZ/PIN SEPERATION IN MILS (DIVISIBLE BY 10)?/]
|
||
PUSHJ P,READNC
|
||
IDIVI T,=10
|
||
JUMPE T,INNERR
|
||
JUMPN TT,INNERR
|
||
ASH T,1
|
||
IS2PIN: AOS (P)
|
||
AOS (P)
|
||
AOS (P) ;ALWAYS EXISTS
|
||
G2PIN: SKIPN A,BODPNT
|
||
JRST MAKE2D
|
||
B2LOP: FETCH(TT,A,TNAM)
|
||
CAIE TT,2
|
||
JRST B2LOP1
|
||
FETCH(TT,A,TPIN)
|
||
FETCH(TT,TT,TPY) ;HRRE?
|
||
CAIN TT,(T)
|
||
POPJ P,
|
||
B2LOP1: HRRZ A,(A)
|
||
JUMPN A,B2LOP
|
||
MAKE2D: PUSHJ P,MAKTYP
|
||
MOVE A,TT
|
||
MOVE TT,BODPNT
|
||
STORE(TT,A,TNXT)
|
||
MOVEM A,BODPNT
|
||
MOVEI TT,2 ;2 PIN DIP
|
||
STORE(TT,A,TNAM)
|
||
PUSHJ P,MAKTPN
|
||
STORE(T,TT,TPY)
|
||
STORE(TT,A,TPIN)
|
||
MOVEI TTT,1 ;PIN 1
|
||
STORE(TTT,TT,TPID)
|
||
PUSH P,B
|
||
MOVE B,TT
|
||
PUSHJ P,MAKTPN
|
||
STORE(TT,B,TPNX)
|
||
MOVEI TTT,2 ;PIN 2
|
||
STORE(TTT,TT,TPID)
|
||
MOVNS T
|
||
STORE(T,TT,TPY)
|
||
JRST POPBJ
|
||
|
||
|
||
;SET DIP TYPE
|
||
SETDIP: PUSHJ P,GETCLS
|
||
JRST PERRET
|
||
TLNN M,DSKACT!MACACT
|
||
OUTSTR[ASCIZ/TYPE DIP TYPE
|
||
/]
|
||
PUSHJ P,TREADU
|
||
POPJ P, ;ALTMODE
|
||
SETZ B, ;NULL
|
||
TLNE M,%IDENT
|
||
TRO MCHG
|
||
MOVE TT,B
|
||
FETCH(B,A,BNAM)
|
||
STORE(TT,A,BNAM)
|
||
JUMPN B,PUTFS
|
||
POPJ P,
|
||
>;MPC
|
||
|
||
OOPS1: OUTSTR[ASCIZ/NO SUCH BODY, CHARLY
|
||
/]
|
||
MD,< JRST PUTFS ;PUT NON-EX NAME BACK IN FREE STORAGE >
|
||
MPC,< POPJ P, >
|
||
|
||
SUBTTL ASSOCIATIVE BODY SET
|
||
;PUT THE BODY AND ALL LOOSE STUFF CONNECTED TO IT IN A SET
|
||
|
||
ASSET: PUSHJ P,GETCLS
|
||
JRST PERRET
|
||
TRZE INMOV
|
||
TRO NEEDCL
|
||
GETFS(T) ;MAKE A NEW SET
|
||
HRLZM A,1(T) ;STARTING WITH THIS BODY
|
||
SETZM (T)
|
||
GETFS(TT)
|
||
HRLM T,(TT)
|
||
SETZM 1(TT)
|
||
EXCH TT,SETPNT
|
||
HRRM TT,@SETPNT
|
||
MOVE H,T ;SET LIST
|
||
MOVE G,H ;END OF THIS SET LIST
|
||
MOVEM A,TRCBDY
|
||
FETCH(A,A,BLNK) ;TRACE FROM ALL OF THIS BODY'S PINS
|
||
JRST ASSET5
|
||
|
||
ASSET2: PUSHJ P,ASSTRC ;TRACE FROM THIS POINT
|
||
ASSET1: FETCH(A,A,BPLNK)
|
||
ASSET5: JUMPN A,ASSET2
|
||
MOVEI T,SETM
|
||
PUSHJ P,CHNGMD ;GO INTO SET MODE
|
||
MOVE A,SETPNT
|
||
PUSHJ P,RECNTR ;CALC CENTER
|
||
MOVE A,SETPNT
|
||
MOVE T,1(A) ;LOC OF CENTER
|
||
JRST CHKON
|
||
|
||
;TRACE FROM POINT (A) AND ADD TO SET (H,G)
|
||
;(ALL OF WIRE FAILS IF IT TERMINATES IN ANOTHER BODY)
|
||
|
||
ASSTRC: TRZ TFLG ;WIRE FAILS IF TRACED TO BODY
|
||
HRLM G,(P) ;CURRENT END OF SET LIST
|
||
PUSHJ P,ASSTR1
|
||
TRNN TFLG ;RAN INTO SOMETHING?
|
||
POPJ P,
|
||
HLRZ G,(P) ;FLUSH THOSE ADDED POINTS
|
||
HRRZ B,(G)
|
||
HLLZS (G)
|
||
JRST PUTFS
|
||
|
||
ASSTR1: JUMPE A,CPOPJ ;TRACE LINES FROM THIS POINT
|
||
HRLM A,(P)
|
||
MD,< FOR @' I IN (D,U,L,R)
|
||
< FETCH(C,A,PN'I)
|
||
PUSHJ P,ASSPUT
|
||
HLRZ A,(P)
|
||
>
|
||
>;MD
|
||
MPC,< FETCH(B,A,PNEB)
|
||
JUMPE B,CPOPJ
|
||
ASSET3: MOVEI D,2
|
||
ASSET4: XCT (D)[HLRZ C,(B)
|
||
HRRZ C,1(B)
|
||
HLRZ C,1(B)]
|
||
PUSH P,B
|
||
HRLM D,(P)
|
||
PUSHJ P,ASSPUT
|
||
HLRZ D,(P)
|
||
POP P,B
|
||
SOJGE D,ASSET4
|
||
HRRZ B,(B)
|
||
JUMPN B,ASSET3
|
||
HLRZ A,(P)
|
||
>;MPC
|
||
POPJ P,
|
||
|
||
ASSPUT: TRNE TFLG ;ALREADY FAILED?
|
||
POPJ P,
|
||
JUMPE C,CPOPJ
|
||
FETCH(T,C,BPBIT)
|
||
MPC,< TRNN T,CPIN ;CAN'T PICKUP WIRE TO CONNECTOR
|
||
JRST ASSPT4
|
||
>;MPC
|
||
TRNN T,ISPIN ;STOP HERE?
|
||
JRST ASSPT3
|
||
FETCH(T,C,BBODY)
|
||
CAME T,TRCBDY ;RAN INTO OURSELF?
|
||
ASSPT4: TRO TFLG ;THIS WIRE ISN'T LOOSE!
|
||
POPJ P,
|
||
|
||
ASSPT3: MOVE T,H ;ALREADY IN SET?
|
||
ASSPT1: HRRZ TT,1(T)
|
||
CAMN TT,C
|
||
POPJ P, ;ALREADY IN, SKIP IT
|
||
MOVE TT,T
|
||
HRRZ T,(T)
|
||
JUMPN T,ASSPT1
|
||
GETFS(T)
|
||
HRRM T,(TT)
|
||
SETZM (T)
|
||
SETZM 1(T)
|
||
MOVE G,T ;NEW END OF LIST
|
||
ASSPT2: HRRM C,1(T)
|
||
HRRZ A,C
|
||
JRST ASSTR1 ;RECURSE
|