;REP.FAI.42, 15-NOV-75 18:07:41, EDIT BY HELLIWELL VERSION(REP,2) ;REPLACEMENT FOR BODIES ; USES A CORRESPONDENCE LIST ; TPIN IN OLD TYPE ,, link ; PIN-ID ,, TPIN IN NEW TYPE ;INITIALIZE CORLST FOR ALL PINS ON OLDTYP REPLST: SKIPE B,CORLST PUSHJ P,PUTFS ;RECLAIM OLD LIST, IF ANY SETZM CORLST MOVEI G,CORLST ;POINT TO IT MOVE A,OLDTYP ;OLD BODY FETCH(A,A,TPIN) JUMPE A,CPOPJ CORNXT: GETFS(T) SETZM 1(T) HRRM T,(G) ;LINK NEW BLOCK MOVE G,T HRLZM A,(G) ;SAVE TYPE PIN POINTER CORPIN: FETCH(A,A,TPNX) JUMPN A,CORNXT POPJ P, ;REPSET - SET CORRESPONDENCES FOR REPLACEMENT ;A = TYPE TO REPLACE REPSET: MOVEM A,OLDTYP MD,< MOVEI T,[ASCIZ/TYPE NEW BODY NAME /] >;MD PUSHJ P,BODYGT POPJ P, ;ALTMODE POPJ P, ;NULL JRST OOPS1 ;NX MOVEM A,NEWTYP REPST1: PUSHJ P,REPLST ;INTIALIZE CORLST MD,< MOVE T,[ASCID/BR/] MOVEM T,SPMODT MOVEI T,SPM PUSHJ P,TCHNGM MOVEI T,UPREP MOVEM T,SPDISP PUSHJ P,PUSHM ;SET PIN IDS ON PUSH P,H PUSHJ P,REPAGN CAIA AOS -1(P) POP P,H PUSHJ P,POPM ;RESTORE STATE OF PIN IDS JRST RCHNGM ;RESTORE OLD MODE >;MD ;REPAGN - ASK FOR REPLACEMENT MODE REPAGN: TLNN M,DSKACT!MACACT OUTSTR[ASCIZ/REPLACEMENT MODE (H FOR HELP)?/] MD,< SETZM KEEPIN ;CLEAR KEEP PINS FLAG SETZM COPPRP ; " COPY PROPERTIES FLAG >;MD MAINTP: PUSHJ P,GETCHR CAIL C,"A"+40 CAILE C,"Z"+40 CAIA SUBI C,40 CAIE C,12 TLNE M,DSKACT!MACACT CAIA OUTSTR[ASCIZ/ /] CAIE C,"H" CAIN C,"?" JRST [ TVOFF TLNN M,DSKACT!MACACT MD,< OUTSTR[ASCIZ/CHAR MODE E EXACT MATCH BY DEFAULT PIN NAME N CLOSEST MATCH BY DEFAULT PIN NAME L EXACT GEOMETRIC OVERLAY C CLOSEST GEOMETRIC OVERLAY ASK ABOUT EACH PIN ABORT M MAINTAIN PIN NAMES (PRECEEDS OTHER COMMANDS) P COPY BODY TEXT AND PROPERTIES /] >;MD MPC,< OUTSTR[ASCIZ/CHAR MODE N MATCH BY PIN # L EXACT GEOMETRIC OVERLAY C CLOSEST GEOMETRIC OVERLAY ASK ABOUT EACH PIN ABORT /] >;MPC TVON JRST MAINTP] MD,< CAIN C,"M" JRST [ SETOM KEEPIN TLNN M,DSKACT!MACACT OUTSTR[ASCIZ/MAINTAINING PIN NAMES./] JRST MAINTP] CAIN C,"P" JRST [ SETOM COPPRP TLNN M,DSKACT!MACACT OUTSTR[ASCIZ/COPYING PROPERTIES AND TEXT./] JRST MAINTP] >;MD CAIN C,ALTMOD POPJ P, MPC,< CAIN C,"N" JRST SAME >;MPC MD,< CAIN C,"N" JRST CNMAT CAIN C,"E" JRST ENMAT >;MD CAIN C,"L" JRST REPLOC CAIN C,"C" JRST REPCLS ;MORE FORGIVING THAN L CAIE C,12 JRST [ PUSHJ P,PERRET JRST REPAGN] ;Set correspondences manually MOVEI G,CORLST TLNN M,DSKACT!MACACT MD,< OUTSTR[ASCIZ/TYPE CORRESPONDENCE FOR PIN ID'S. /] >;MD MPC,< OUTSTR[ASCIZ/TYPE CORRESPONDENCE FOR PIN NAMES. /] >;MPC JRST GETIN ;GETPIN - ASK FOR CORRESPONDENCES GETPIN: TLNE M,DSKACT!MACACT JRST NOTALK MD,< OUTSTR[ASCIZ/OLD PIN ID /] > MPC,< OUTSTR[ASCIZ/OLD PIN NAME /] > HLRZ T,(G) ;PIN IN DEF FETCH(T,T,TPID) MD,< PUSHJ P,DECOUT ;PRINT PIN ID >;MD MPC,< HRRZ A,T PUSH P,PUTCHR MOVE T,[OUTCHR TTT] MOVEM T,PUTCHR PUSHJ P,BPINPN ;PRINT AS BODY PIN# POP P,PUTCHR >;MPC OUTSTR[ASCIZ/=/] NOTALK: MPC,< MOVE C,[PUSHJ P,GETLCH] MOVEM C,GTCHRX PUSHJ P,RPNAM CAIA >;MPC MD,< PUSHJ P,READN > CAIE C,12 JRST [ PUSHJ P,SCARF JRST REPST1 JRST GETPIN] SETZ A, JUMPE T,NEWOK MOVEI A,CORLST JRST CHKNUM ;Check if the new PIN# already asked for CHKNXT: HLRZ TT,1(A) ;NEW PIN NUMBERS ASKED FOR ALREADY CAMN TT,T JRST [ TLNN M,DSKACT!MACACT OUTSTR[ASCIZ/ALREADY USED! /] JRST GETPIN] CHKNUM: HRRZ A,(A) JUMPN A,CHKNXT MOVE A,NEWTYP FETCH(A,A,TPIN) JRST NEWCH1 ;Check if the PIN# asked for is in new TYPE NEWNXT: FETCH(TT,A,TPID) CAMN TT,T JRST NEWOK NEWCHK: FETCH(A,A,TPNX) NEWCH1: JUMPN A,NEWNXT TLNN DSKACT!MACACT OUTSTR[ASCIZ/NO SUCH PIN IN NEW TYPE! /] JRST GETPIN NEWOK: HRLM T,1(G) ;PIN# ASKED FOR HRRM A,1(G) ;THAT PIN IN NEW TYPE GETIN: MOVE H,G HRRZ G,(G) JUMPN G,GETPIN ;SAMEDN - FINISH UP CORLST WITH ALL OTHER PINS ON NEWTYP ;FALLS THRU SAMEDN: MOVE G,NEWTYP FETCH(G,G,TPIN) JRST REPNW9 REPNEW: GETFS(T) HRRZM G,1(T) EXCH T,CORLST HRRZM T,@CORLST REPNW1: FETCH(G,G,TPNX) REPNW9: JUMPE G,CPOPJ1 FETCH(T,G,TPID) ;A PIN ON NEW TYPE SKIPN A,CORLST ;CHECK IF ALREADY ON CORLST JRST REPNEW REPNW3: HLRZ TT,1(A) CAMN TT,T JRST REPNW1 ;OK, IT'S THERE REPNW2: HRRZ A,(A) JUMPN A,REPNW3 JRST REPNEW ;NOT THERE, CONS NEW ENTRY ONTO CORLST ;SAME - CORRESPOND TO SAME PIN# IN NEWTYP MPC,< ;SETUP CORRESPENDENCES - SAME PIN# IN NEWTYP SAME: SKIPN G,CORLST ;RUN DOWN CORLST JRST SAMEDN SAME4: HLRZ T,(G) ;OLD PIN (IN TYPE) FETCH(T,T,TPID) ;ITS PIN # MOVE A,NEWTYP FETCH(A,A,TPIN) JUMPE A,SAME3 SAME2: FETCH(TT,A,TPID) CAME T,TT ;SAME PIN IN NEW TYPE? JRST SAME1 HRRZM A,1(G) ;REMEMBER NEW PIN (IN TYPE) HRLM T,1(G) ; " PIN # SAME3: HRRZ G,(G) JUMPE G,SAMEDN JRST SAME4 SAME1: HRRZ A,(A) JUMPN A,SAME2 JRST SAME3 >;MPC ;AUTO REPLACE MPC,< REPCL1: PUSHJ P,REPLST ;INITIALIZE CORLST >;MPC REPLOC: ;OFFSET CRAP GOES HERE PUSHJ P,REPCL4 JRST RPLERR JRST SAMEDN RPLERR: TLNN M,DSKACT!MACACT OUTSTR[ASCIZ/ SORRY, NO EXACT MATCH BY GEOMETRIC OVERLAY POSSIBLE. /] JRST REPST1 ;FIND CLOSEST PIN YET UNREPLACED ;A = PIN IN NEW TYPE ;RETURNS ;CURPIN = PIN FOUND CLOSEST ;CURDIS = DISTANCE " FCLONE: SETZM CURPIN ;NO CLOSEST YET! HRLOI T,77777 ;LARGE NUMBER MOVEM T,CURDIS ;CURRENT CLOSEST DISTANCE REPL3: SKIPE 1(G) ;HAVE WE FOUND THIS ONE YET? JRST REPL2 ;YES, SKIP IT HLRZ T,(G) ;POINTER TO OLD PIN TYPE BLOCK FETCH(T,T,TPXY) ;OLD PIN LOCATION ADJUST(SUB,T,) HLRE TT,T HRRES T IMUL T,T IMUL TT,TT ADD T,TT ;SQUARE OF DISTANCE CAML T,CURDIS ;SMALLER? JRST REPL2 ;NO MOVEM T,CURDIS ;UPDATE MOVEM G,CURPIN REPL2: HRRZ G,(G) ;ANOTHER MEMBER OF CORLST JUMPN G,REPL3 POPJ P, ;GEOMETIC OVERLAY FOR DIFF NUMBER OF PINS %MAX__20 ;MAX SEPARATION BETWEEN PINS IN ORDER TO MATCH! REPCLS: ;OFFSET STUFF GOES HERE ??? PUSHJ P,REPCL4 JFCL ;THIS VERSION DOESN'T CARE JRST SAMEDN REPCL4: SKIPN CORLST POPJ P, MOVE A,NEWTYP FETCH(A,A,TPIN) JUMPE A,CPOPJ HRLOI B,77777 SETZ H, ;NONE FOUND YET REPCL2: FETCH(T,A,TPID) HRL A,T ;PIN#,,PIN TRZ TFLG MOVE G,CORLST REPCL5: CAMN A,1(G) ;IS IT MAPPED YET? JRST REPCL3 ;YES, TRY ANOTHER HRRZ G,(G) JUMPN G,REPCL5 TRO TFLG ;FLAG UN-MAPPED NEW PIN SEEN MOVE G,CORLST ;NOT USED YET, CHECK DISTANCE PUSHJ P,FCLONE ;FIND ONE SKIPN CURPIN ;DID WE FIND ONE POPJ P, ;NO, RAN OUT OF CORLST I GUESS CAMG B,CURDIS ;IS IT CLOSEST YET? JRST REPCL3 ;NO MOVE B,CURDIS MOVE H,CURPIN ;SAVE CLOSEST YET HRL H,A ;SAVE BOTH POINTERS REPCL3: HRRZ A,(A) JUMPN A,REPCL2 ;LOOP THROUGH ALL JUMPE H,REPCL6 CAILE B,%MAX*%MAX ;TO FAR APART? POPJ P, HLRZ A,H ;GET POINTER TO NEW PIN FETCH(T,A,TPID) HRL A,T ;AND PIN ID MOVEM A,1(H) ;AND SAVE HERE JRST REPCL4 ;LOOP UNTIL ALL ASSIGNED REPCL6: TRNE TFLG ;ALL NEW PINS MAPPED? POPJ P, ;NO, LOSE RETURN MOVE H,CORLST REPCL7: SKIPN 1(H) ;THIS OLD PIN MAPPED? POPJ P, ;NO, LOSE HRRZ H,(H) JUMPN H,REPCL7 JRST CPOPJ1 ;ALL OLD PINS MAPPED, WIN ;MAP BY DEFAULT PIN NAMES MD,< CNMAT: PUSHJ P,DONMAT ;BEST MATCH BY DEFAULT PIN NAMES JFCL JRST SAMEDN ;AUTO REPLACE REPCL1: PUSHJ P,REPLST ;INITIALIZE CORLST SETOM KEEPIN ;MAKE SURE WE KEEP PINS SETOM COPPRP ;AND PROPERTIES ENMAT: PUSHJ P,DONMAT ;EXACT MATCH ONLY, BY DEFAULT PIN NAMES JRST ENERR JRST SAMEDN ENERR: TLNN M,DSKACT!MACACT OUTSTR[ASCIZ/ SORRY, NO EXACT MATCH BY DEFAULT PIN NAME POSSIBLE. /] JRST REPST1 ;DONMAT - MATCH PINS BY DEFAULT PIN NAMES, TRIES ITS DAMNDEST DONMAT: SKIPN CORLST POPJ P, TRZ TFLG!ATLP ;TFLG MEANS MATCH WASN'T EXACT ;Clear mark bits on all PINs of new TYPE MOVE A,NEWTYP FETCH(A,A,TPIN) JUMPE A,CPOPJ DONMT0: CLRBIT(DPTMP1!DPTMP2,TT,A,TPBIT) FETCH(A,A,TPNX) JUMPN A,DONMT0 MOVE A,NEWTYP FETCH(A,A,TPIN) DONMT1: FETCH(T,A,TPBIT) ;FIND A PIN NOT ASSIGNED YET TRNE T,DPTMP1 JRST DONMT6 ANDI T,BASSLH FETCH(TT,A,TPNAM) ;DEFAULT NAME HRL T,TT ;T = DEF NAME,,BASSLH FETCH(B,A,TPNX) JUMPE B,DONMT3 ;Check for any other PINS with same default on the new type DONMT2: FETCH(TTT,B,TPBIT) ANDI TTT,BASSLH FETCH(TT,B,TPNAM) HRL TTT,TT CAMN TTT,T ;SAME DEFAULT, BUSSED, L/H ? JRST [ TRO TFLG ;YES, MATCH ISN'T EXACT JRST DONMT3] FETCH(B,B,TPNX) JUMPN B,DONMT2 ;Check for only one pin on old type with matching default DONMT3: MOVE G,CORLST SETZM CURPIN DONMT4: SKIPE 1(G) ;NOT MATCHED YET? JRST DONMT5 HLRZ TT,(G) FETCH(TTT,TT,TPNAM) PUSH P,TTT FETCH(TTT,TT,TPBIT) ANDI TTT,BASSLH HRL TTT,(P) SUB P,[1,,1] CAME TTT,T JRST DONMT5 SKIPE CURPIN JRST [ TRO TFLG ;MORE THAN ONE POSSIBLE MATCH ON OLD BODY JRST DONMTB] MOVEM G,CURPIN DONMT5: HRRZ G,(G) JUMPN G,DONMT4 DONMTB: SKIPN G,CURPIN JRST [ TRO ATLP ;NEW PIN NOT MATCHED ON OLD BODY JRST DONMT6] FETCH(T,A,TPID) HRL A,T MOVEM A,1(G) ;UNIQUE MATCH, SET CORRESPONDENCE SETBIT(DPTMP1,TT,A,TPBIT) DONMT6: FETCH(A,A,TPNX) JUMPN A,DONMT1 ;FALLS THRU ;TRY LOOSER MATCH TRNN ATLP ;ANY NOMATCH ON A NEW PIN ? JRST REPCL6 ; NO, CHECK IF ANY ERRORS IN MATCHING ;PASS2 - Try looser match, for those pins that weren't found above MOVE A,NEWTYP FETCH(A,A,TPIN) DONMA1: FETCH(T,A,TPBIT) TRNE T,DPTMP2!DPTMP1 ;UNMATCHED? JRST DONMA6 NODEC,< FETCH(T,A,TPNAM) > ;LOOK FOR ANY PIN WITH SAME DEFAULT PIN NAME DEC,< ANDI T,BUSSED ;DEC, A LITTLE STRICTER, SINCE WE DID L/H LAST TIME FETCH(TT,A,TPNAM) HRL T,TT >;DEC FETCH(B,A,TPNX) JUMPE B,DONMA3 DONMA2: NODEC,< FETCH(TTT,B,TPNAM) > ;,,TPNAM DEC,< ANDI TTT,BUSSED FETCH(TT,B,TPNAM) HRL TTT,TT ;TPNAM,,BUSSED >;DEC CAMN TTT,T JRST [ FETCH(TTT,B,TPBIT) ;SAME DEFAULT TRNE TTT,DPTMP1 ; APPEARS UNMATCHED TWICE ON NEW TYPE? JRST .+1 TRO TFLG ;LOOSER MATCH IS AMBIGUOUS JRST DONMA3] FETCH(B,B,TPNX) JUMPN B,DONMA2 ;Now see if there is a single pin in old TYPE that matches this looser eqv DONMA3: MOVE G,CORLST SETZM CURPIN DONMA4: SKIPE 1(G) ;NOT MATCHED YET? JRST DONMA5 HLRZ TT,(G) NODEC,< FETCH(TTT,TT,TPNAM) > ;,,TPNAM DEC,< FETCH(TTT,TT,TPBIT) ANDI TTT,BUSSED PUSH P,TTT FETCH(TTT,TT,TPNAM) HRLM TTT,(P) POP P,TTT ;TPNAM,,BUSSED >;DEC CAME TTT,T JRST DONMA5 SKIPE CURPIN ;MATCHES TOO MANY IN OLD TYPE? JRST [ TRO TFLG ;MATCH NOT EXACT, BUT DO OUR BEST JRST DONMA7] MOVEM G,CURPIN DONMA5: HRRZ G,(G) JUMPN G,DONMA4 DONMA7: SKIPN G,CURPIN JRST [ TRO TFLG ;NO MATCH FOR THIS PIN, ERROR JRST DONMA6] FETCH(T,A,TPID) HRL A,T MOVEM A,1(G) SETBIT(DPTMP2,TT,A,TPBIT) ;NOT NEEDED? DONMA6: FETCH(A,A,TPNX) JUMPN A,DONMA1 JRST REPCL6 ;THERE SHOULD PROBABLY BE N PASSES, IN ORDER OF INCREASING LOOSENESS >;MD REPONE: PUSHJ P,GETCLS POPJ P, PUSH P,A FETCH(A,A,BTYP) PUSHJ P,REPSET ;SET UP CORRESPONDENCE JRST [ POP P,(P) JRST CLRREP] POP P,G PUSHJ P,REPIT TRO MCHG JRST CLRREP IFN 0,< PUSHJ P,CLRREP ;STRAIGHTEN AUTOMATICALLY? MD,< JRST STRAIGHTEN > MPC,< POPJ P, > >;IFN 0 REPALL: MD,< MOVEI T,[ASCIZ/TYPE OLD BODY NAME /] >;MD PUSHJ P,BODYGT POPJ P, ;ALTMODE POPJ P, ;NULL JRST OOPS1 ;NX PUSHJ P,REPSET JRST CLRREP REPLOP: TRO MCHG SKIPN G,DBODPN JRST CLRREP REPLP2: FETCH(B,G,BTYP) CAMN B,OLDTYP ;DOES THIS BODY HAVE THE RIGHT TYPE? PUSHJ P,REPIT REPLP1: FETCH(G,G,BNXT) JUMPN G,REPLP2 JRST CLRREP IFN 0,< PUSHJ P,CLRREP MD,< JRST STRAIGHTEN > MPC,< POPJ P, > >;IFN 0 ;REPSOME - SELECTIVE REPLACE BODY REPSOME: MD,< MOVEI T,[ASCIZ/TYPE OLD BODY NAME /] >;MD PUSHJ P,BODYGT POPJ P, ;ALTMODE POPJ P, ;NULL JRST OOPS1 ;NX PUSHJ P,REPSET JRST CLRREP ;LET HIM OUT MOVEI T,UPSTAR ;WHERE TO GO IN UPCLOS MOVEM T,SPDISP MOVE T,[ASCID/BR/] MOVEM T,SPMODT MOVEI T,SPM PUSHJ P,TCHNGM ;GET INTO SPECIAL POINTER MODE SKIPN G,DBODPN JRST REPALT JRST REPSP1 REPSPC: MOVE G,CURREP HRRZ G,(G) JUMPE G,REPALT REPSP1: MOVEM G,CURREP FETCH(A,G,BTYP) CAME A,OLDTYP JRST REPSPC ;KEEP LOOKING MOVEI T,BIGPG MOVEM T,PGLASS PUSHJ P,DPYSET PUSHJ P,SETBRT FETCH(T,G,BXY) TLNE M,DSKACT!MACACT JRST ISON ;NO, ALL BODIES ARE ON PUSHJ P,ONSCR ;IS IT ON SCREEN? PUSHJ P,PICSET ;NO, GET IT ON ISON: MOVEM T,STARLOC TLNN M,DSKACT!MACACT OUTSTR[ASCIZ/ THIS ONE/] PUSHJ P,YORN JRST REPALT JRST REPSPC MOVE G,CURREP PUSHJ P,REPIT TRO MCHG IFN 0,> JRST REPSPC REPALT: PUSHJ P,RCHNGM ;RESTORE OLD MODE CLRREP: SKIPE B,CORLST PUSHJ P,PUTFS SETZM CORLST POPJ P, ;REPLACE BODY ; G = OLD BODY ; NEWTYP = NEW TYPE ; OLDTYP = TYPE OF OLD BODY REPIT: PUSH P,G MOVE T,NEWTYP STORE(T,G,BTYP) MD,< CAMN T,OLDTYP ;DON'T COPY PROPERTIES IF SAME BODY JRST REPITP HRRZ T,(P) PUSHJ P,OFFBLO ;FIX CHAR OFFSET IF BIT ON FETCH(T,G,BBIT) TRNN T,FIXLOC ;LOCN FOLLOWING DEFAULT? JRST NFXBLC FETCH(B,G,BLOC) ;YES, AND THERE IS LOCN? JUMPE B,NFXBLC ;JUST IN CASE MOVE A,G PUSHJ P,STLCOF ;SET LOCN OFFSET FROM NEW TYPE NFXBLC: FETCH(C,G,BTXT) ;BODY PROP LIST CLEAR(G,BTXT) ;ZERO POINTER TO IT SKIPN COPPRP ;COPY PROPERTIES? JRST [ PUSHJ P,TXTREL ;NO, RELEASE PROP LIST STG IN C JRST REPITP] JUMPE C,REPITP ;NOTHING TO DO IF NO LOCAL PROPS ;Now merge local PROP/TEXT with those from TYPE def MOVE A,G ;GET BODY POINTER PUSHJ P,COPLTP ;COPY TYPE'S TEXT/PROPERTIES INTO BODY'S INDIRECT LIST MOVE B,C ;OLD PROP LIST IN B PUSHJ P,MERGEP ;MERGE OLD PROPS ONTO NEW PUSHJ P,TXTREL ;RECLAIM OLD PROP LIST (C) REPITP: >;MD MPC,< SWITCH MOVEI G,RADDR(G,BLNK,BPLNK) ;MAKE FIRST PTR LOOK LIKE REST OF LIST HRRZ F,(P) ;BODY PUSHJ P,REPIT1 ;DO BACK SIDE FIRST HRRZ G,(P) SWITCH >;MPC MOVEI G,RADDR(G,BLNK,BPLNK) ;MAKE FIRST PTR LOOK LIKE REST OF LIST HRRZ F,(P) ;BODY PUSHJ P,REPIT1 ;DO IT HRRZ A,(P) ;BODY POINTER PUSHJ P,BODFIX ;FIX ALL THE PINS ON IT! POP P,G ;RESTORE BODY POINTER POPJ P, ;REPIT1 - REPLACE PINS ON BODY BEING REPLACED ;G = RADDR(,BLNK,BPLNK) ;F = BODY POINTER ;REPIT2 ;G = BPOINT ;H = PREVIOUS ;A = CORRESPONDENCE BLOCK REPIT2: HRRZ T,1(A) JUMPN T,REPDL5 ;REPLACE? MOVE B,G FETCH(G,G,BPLNK) ;NO, TURN INTO POINT STORE(G,H,BPLNK) ;LINK THIS PIN OUT PUSHJ P,PINPNT ;CHANGE PIN TO PLAIN POINT JRST REPDL4 REPDL5: STORE(T,G,BPLOC) ;NEW TYPE PIN POINTER MD,< SKIPN KEEPIN ;KEEPING PIN #'S? CLEAR(G,BPPN) ;NO, FLUSH THEM >;MD PUSH P,F FETCH(B,G,BBODY) ;BODY POINTER FETCH(F,B,BORI) ;GET ORIENTATION FROM OLD BODY FETCH(T,T,TPXY) ;X,Y FROM PIN TYPE BLOCK PUSHJ P,ORIENT ;ORIENT IT ADJUST(ADD,T,) ;ADJUST TO BODY LOCATION MOVE A,SAVEG MD,< PUSH P,G PUSHJ P,PMOVRL ;MOVE TO NEW POS! POP P,G >;MD POP P,F REPIT1: MOVE H,G ;SAVE POINTER TO PREVIOUS FOR LINK OUT FETCH(G,G,BPLNK) REPDL4: JUMPE G,REPMAK ;DONE WITH OLD PINS, NOW MAKE EXTRA PINS MOVEM G,SAVEG MPC,< FETCHL(TT,G,BPBIT) EQV TT,SID JUMPGE TT,REPIT1 ;SAME SIDE? >;MPC FETCH(T,G,BPLOC) MOVEI A,CORLST ;CORRESPONDENCE LIST JRST REPIT3 REPIT4: HLRZ TT,(A) CAMN TT,T ;SAME PIN IN TYPE? JRST REPIT2 REPIT3: HRRZ A,(A) JUMPN A,REPIT4 OUTSTR[ASCIZ/POINT NOT FOUND AT REPIT4!! /] PUSHJ P,FUCKUP JRST REPIT1 ;THIS SHOULDN'T HAVE HAPPENED ;REPMAK - MAKE EXTRA PINS IN NEW BODY ;H = END OF BPOINT LIST ;F = BODY REPMAK: MOVEI G,CORLST ;MAKE EXTRA PINS REQUIRED BY REPLACEMENT PUSH P,F ;BODY JRST REPMK1 REPMK2: HLRZ A,(G) ;TPIN OF OLD PIN JUMPN A,REPMK1 ;NOT A NEW PIN? HRRZ A,1(G) ;POINTER TO NEW TPIN BLOCK MOVE B,(P) ;BODY POINTER HRLI B,ISPIN ;PIN PUSHJ P,PUTPNT ;MAKE IT (D RETURNED = POINT CREATED) MPC,< 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) >;MPC STORE(D,H,BPLNK) ;LINK ONTO END OF OLD PIN LIST MOVE H,D ;MAKE THIS NEW ONE END OF LIST REPMK1: HRRZ G,(G) JUMPN G,REPMK2 POP P,F POPJ P,