%EXTERNALROUTINE FLO(%STRING (63) S) %STRING (63) INFILE, OUTFILE %EXTERNALROUTINESPEC DEFINE(%STRING (63) S) ! ! FRONT PANEL USEAGE INFO. ! %SHORTINTEGERARRAY PINS(0:63,1:38) ! ! PIN PARAMS. TO DRAWING ROUTINES ! %INTEGERARRAY PICT(1 : 11) %INTEGERARRAY POSITION(16 : 63) %INTEGERARRAY LINK, DATA(1 : 1024) %INTEGER STARTS, ASL, WIRES %CONSTSTRING (1) SNL = ' ' ! ! PIN USEAGE TEXT ! %CONSTSTRING (11) %ARRAY TXT(-64 : 15) = %C 'START','FFCOMP','FFSET0','FFSET1','FFRDDATA','FFDATA', 'NOP','TT<=PRINT','ENABLE',' //2','A<=A*2', 'A<=A+1','A<=\A','B<=\B','A<=A-1', 'A<=A+B','A<=A-B','A<=A&B','A<=AORB', 'A<=AXORB','<=MEM','<=SP15','<=BYTEREG','<=BREG 0:11', '<=BREG 0:7','<=BREG 0:3','<=LO TR','<=HI TR','<=CONST4', '<=CONST3','<=CONST2','<=CONST1','<=SINT','<=IPINT', '<=GPINT','<=A','<=B','<=0','MEM<=','LADR<=','SP15<=','SP14<=', 'SP13<=','SP12<=','SP11<=','SP10<=','SP9<=','SP8<=','SP7<=','SP6<=', 'SP5<=','SP4<=','SP3<=','SP2<=','SP1<=','SP0<=','BYTE REG<=', 'LO TR<=','HI TR<=','OPINT<=','GPINT<=', 'B<=','A<=','BUS SNS<=','UNUSED','EVOKE IN','EVOKE OUT', '2OR IN','2OR OUT','4OR IN','4OR OUT','2BR IN', '2BR OUT','8BR IN','8BR OUT','SRET IN', 'SRET OUT','ENDSUB','2BR CND','8BR CND' ! ! MODULE PIN USEAGE INFO. ! %CONSTSHORTINTEGERARRAY PINSPEC(1 : 798) = %C %C 0(9),1,0,2,0(3),1,5,2,5,1,5, 2,5,0,6,11,5,13,5,12,6,1,0,2,5,1,5,2, 3,0,3,0,4,0,3(4),4,4,0,0, 3(4),4,4,3(4),4,4,3(4),4,4,0,3,0,3, 0,4, 0(7),-58,0,-58(3),0(2),-58(5),0,-58(12), 0,-58(2),0,-58,0, 0(7),12,0,13,0,12,0(2),11,13,0,12,11,13, 0,12,11,13,0,12,11,13,0,12,11,13,0(4),11,0, 5,0,5,0,5,0,5,5,6,5(3),0,0,5(3),6,5,5,6, 5(6),6,5,5,6,5,0,5,0,5,0,6, 0(3),-64,0(21),-1,0,-1,-1,-27,-1,-27,0,0,-27,0,-27,0, 0(16),-3(8),-2(8),0(6), 0(9),-4,-30,-4,0,0,-30,-4,-30,-4,-30,0(19), 0(9),-5,0,-5,0(3),-5,0,-5,0(20), 0(10),-31,0(3),-31,0,-31,0,-31,0(19), 0(10),-57,0(3),-57,0,-57,0,-57,0,0,-56,0,-56,0,-56, 0,-56,0,-32,0,-32,0,-32,0,-32,0,0, 0(16),-34,0,-34,0,-36,-34,-36,-34,-36,-33,-36,-33, 0,-33,-35,-33,0,-35,0,-35,0,0, 0(10),-7,0(6),-7,0,-6,0,-6,0(9),-38,0,-38,-37,0,-37,0, 0(7),-8,0,-8,0,-8,0(3),-8,0(4),-42,0,-42,0,-41,0,-41, 0,-40,0,-40,0(3),-39,0,-39,0, 0(10),9(2),0(2),15(6),10(12),0,0,10(4), 0(7),8,0,8,14,8,0,0,7,8,14,8,7,8, 14,8,7,8,14,8,7,8,14,8,7,8,0,0, 14,0,7,0, 0(10),-60,0(3),-63,0,-59,-61,0,0,-62, -62,0,-61,-59,0,-63,-61,-60(2),0,-63,0, -59,0,-62,0,0, 0(3),-29,0(3),-29,0,-29,-51,-29,0,0,-51, -51,-52,-51,-52,-49,-52,-50,-52,-50(3), -55,-49,-55,-49,-55,-49,0, -47,-55,-46,0,-48, 0(11),-54,0(3),-54,0,-54,0,-54,0,-53,0,-53,0,-53, 0,-53,0,-28,0,-28,0,-28,0,-28,0,-45, 0(3),-11,0(3),-15,0,-15,-16(2),0,0,-13(2), -14,-10,-14,-10,-20,-12,-20,-12,-22,-18,-22,-18,-21, -17,-21,-17,0,0,-19,0,-19,0, 0(9),-24,0,-24,0(3),-24,0,-24,0,-43, 0,-43,0(3),-43,0(3),-43,0,-9,0,-9,0,-11,0,0 ! ! MAPS PIN NOS. TO CORRESP. LETTER ! %CONSTBYTEINTEGERARRAY VAL(1 : 19) = %C 'A','B','C','D','E','F','G','H','J', 'K','L','M','N','P','R','S','T', 'U','V' ! ! PINS USED BY DRAWING ROUTINES ! %CONSTSHORTINTEGERARRAY P(1 : 116) = %C 1,3,5,7,9,11,8,10,12, 15,17,19,16,18,20,21,23,25, 22,24,26,27,29,31, 1,7,9,3,5,8,16,18,10,12, 11,19,21,15,17,20,26,28,22,24, 23,29,31,25,27,30,36,38,32,34, 37,29,31,35,27,23,17,25,21,19, 15,10,11,8, 19,16,17,12, 23,20,21,18, 26,28,8,30, 27,24,25,22,31,28,29,26, 37,32,35,30, 15,11,10,8, 19,17,16,12, 23,21,20,18, 27,25,24,22, 31,29,28,26, 37,35,32,30 ! ! LIST PROCESSING ROUTINES FOLLOW. ! %ROUTINE PUSH(%INTEGER D, %INTEGERNAME P) DATA(ASL) = D D = ASL ASL = LINK(ASL) LINK(D) = P P = D %END %INTEGERFN POP(%INTEGERNAME P) %INTEGER D D = P P = LINK(P) LINK(D) = ASL ASL = D %RESULT = DATA(ASL) %END %ROUTINE CONCAT(%INTEGERNAME P1, P2) %INTEGER D %IF P1 = 0 %THEN %START P1 = P2 P2 = 0 %RETURN %FINISH D = P1 %WHILE LINK(D) # 0 %THEN D = LINK(D) LINK(D) = P2 P2 = 0 %END %ROUTINE BACKWARD PUSH(%INTEGER N, %INTEGERNAME P1) %INTEGER P2 P2 = 0 PUSH(N, P2) CONCAT(P1, P2) %END %ROUTINE ALLOCATE ! ! GIVEN MODULE ALLOCATION, IT ! FILLS IN PIN USEAGE INFO. ! %INTEGER P, ISPEC, TYPE, C, C1, C2 %CONSTSHORTINTEGERARRAY BASE(1 : 19) = %C 0,38,76,114,152,190,228,266,304,342, 380,418,456,494,532,570,608,646,722 %ROUTINE FILL %INTEGER C %CYCLE C = 1, 1, 38 PINS(P, C) = PINSPEC(ISPEC+C) %REPEAT %END %CYCLE C1 = 0, 1, 63 %CYCLE C2 = 1, 1, 38 PINS(C1, C2) = 0 %REPEAT %REPEAT %CYCLE C = 16, 1, 63 TYPE = POSITION(C) %IF TYPE # 0 %THEN %START ISPEC = BASE(TYPE) P = C FILL %IF TYPE > 17 %THEN %START ! DOUBLE HEIGHT MODULE ISPEC = ISPEC+38 P = P-16 FILL %FINISH %FINISH %REPEAT %END %ROUTINE PRINT PIN(%INTEGER THIS, FIRST, LAST) %INTEGER C1, C2, S1, S2 C2 = THIS&X'FF' %IF FIRST = 1 %THEN %START C1 = THIS>>16 S2 = C1//16+'A' S1 = C1-(C1//16)*16 %IF S1 < 10 %THEN S1 = S1+'0' %ELSE S1 = S1-10+'A' PRINTSYMBOL(S1) PRINTSYMBOL(S2) %FINISH %IF LAST = 1 %THEN %START PRINTSYMBOL(VAL((C2+1)//2)) PRINTSYMBOL('1'+(\C2&1)) %FINISH %END %INTEGERFN NEXT PIN START(%INTEGER THIS, FLAG) %CONSTBYTEINTEGERARRAY MAP(0 : 20) = %C 0,1,2,0,3,4,0(9),5,6,0(4) %OWNINTEGER NOPRINTED = 1 %CONSTBYTEINTEGERARRAY OUTPT OF(1 : 152) = %C 0(9),12,0(5),18,25,0,25,22,25,0,25, 0,0,30,31,30,31,0(2),34,0,0,31, 38,31,0,5,0,5,0(3),11,12,11,12,0(4),19, 20,19,20,0(2),25,26,25,26,0(2), 31,32,31,32,0(3),38,0,38,0,0, 0(9),8,0(4),8,12,0(2),12,18,0(2),18,22, 0(2),22,0(3),26,30,0(4),30,26, 9,0,9,0,9,0,9,18,0,18, 21,18,0(2),21,18,21,0,21,28, 0,28,31,28,31,28,31,0,31,38, 0,38,0,38,0,38,0,0 %OWNINTEGERARRAY PRINTED(0 : 400) %INTEGER TYPE, I, J, NEXT, C I = THIS>>16 J = THIS&X'FF' PRINTED(0) = 0 TYPE = MAP(POSITION(I)) I = I<<16 %IF TYPE < 5 %THEN %START %IF TYPE < 1 %THEN %START %PRINTTEXT 'FAULT PIN' PRINT PIN(THIS, 1, 1) %PRINTTEXT ' NOT AN INPUT' NEWLINE %RESULT = 0 %FINISH NEXT = OUTPT OF((TYPE-1)*38+J)+I %IF FLAG = '?' %THEN %RESULT = NEXT %CYCLE C = 0, 1, NOPRINTED-1 %IF PRINTED(C) = NEXT %THEN %RESULT = 0 %REPEAT PRINTED(NOPRINTED) = NEXT NOPRINTED = NOPRINTED+1 %RESULT = NEXT %FINISH %ELSE %START %IF TYPE = 5 %THEN %START %IF J = 11 %THEN %START PUSH(I+37, STARTS) PUSH(I+35, STARTS) PUSH(I+31, STARTS) PUSH(I+29, STARTS) PUSH(I+27, STARTS) PUSH(I+25, STARTS) PUSH(I+23, STARTS) NEXT = 21 %FINISH %ELSE %START PUSH(I+38, STARTS) PUSH(I+36, STARTS) PUSH(I+32, STARTS) PUSH(I+30, STARTS) PUSH(I+28, STARTS) PUSH(I+26, STARTS) PUSH(I+24, STARTS) NEXT = 22 %FINISH %FINISH %ELSE %START ! TYPE 6, 'COND' %IF J = 15 %THEN NEXT = 8 %AND PUSH(I+10, STARTS) %IF J = 19 %THEN NEXT = 12 %AND PUSH(I+16, STARTS) %IF J = 23 %THEN NEXT = 18 %AND PUSH(I+20, STARTS) %IF J = 27 %THEN NEXT = 22 %AND PUSH(I+24, STARTS) %IF J = 31 %THEN NEXT = 26 %AND PUSH(I+28, STARTS) %IF J = 37 %THEN NEXT = 30 %AND PUSH(I+32, STARTS) %FINISH %FINISH %RESULT = I+NEXT %END %INTEGERFN LIST WITH(%INTEGER THIS) %INTEGER P, D, W, LAST ! ! FINDS THE LIST CONTAINING THIS PIN ! DETACHES IT FROM THE LIST OF WIRES ! RESULT IS THE LIST POINTER ! W = WIRES LAST = 0 %WHILE W # 0 %CYCLE D = DATA(DATA(W)) %IF D = THIS %THEN %START P = DATA(W) %IF LAST = 0 %THEN D = POP(WIRES) %C %ELSE D = POP(LINK(LAST)) %RESULT = P %FINISH LAST = W W = LINK(W) %REPEAT %RESULT = 0 ! NOT FOUND %END %ROUTINE READ MODULE POSNS ! ! READS MODULE USEAGE AND ! ALLOCATIONS FROM INPUT FILE. ! %CONSTSTRING (9) %ARRAY TYPE(0 : 20) = %C 'UNUSED', 'EVOKE','MERGE2','NOP','RTCALL','MERGE4','BSENSE', 'GPAUR','GPINT','OPINT','IPINT','SINT','CGEN','TREG', 'BREG','BRANCH','COND','FLAG','GPAUC','SPREG','ETC' %INTEGER C, S, BUS SENSE %STRING (20) ST %ROUTINE SKIP LINES(%INTEGER N) %INTEGER C, S ! SKIPS EXACTLY N NEWLINE SYMBOLS. %CYCLE C = 1, 1, N READ SYMBOL(S) %UNTIL S = NL %REPEAT %END %ROUTINE READ STRING %STRING (1) S ST = '' READ ITEM(S) %UNTIL S # ' ' %AND S # SNL %CYCLE ST = ST.S %EXIT %IF NEXTSYMBOL = NL READ ITEM(S) %EXIT %IF S = ' ' %REPEAT %END %ROUTINE ALLOCATE LIST %INTEGER S, N, MTYPE %CYCLE MTYPE = 20, -1, 0 %IF TYPE(MTYPE) = ST %THEN %EXIT %REPEAT %IF MTYPE = 0 %AND ST # 'BTRMTR' %THEN %START PRINTSTRING('UNDEFINED MODULE '.ST.SNL) SKIP LINES(1) %RETURN %FINISH %CYCLE READ SYMBOL(S) %UNTIL S # ' ' %EXIT %IF S = NL %IF '0' <= S <= '9' %THEN N = S-'0' %ELSE N = S-'A'+10 READ SYMBOL(S) POSITION(N+(S-'A')*16) = MTYPE %REPEAT %END %CYCLE C = 16, 1, 63 POSITION(C) = 0 %REPEAT %CYCLE READ STRING %IF ST = 'NAME' %THEN %EXIT SKIP LINES(1) %REPEAT SKIP LINES(3) %CYCLE !SKIP NAME FIELD. %CYCLE C = 1, 1, 8 READ SYMBOL(S) %IF S = '#' %THEN -> CONTROL MODS %REPEAT ! READ MODULE TYPE. READ STRING ALLOCATE LIST %REPEAT CONTROL MODS: %CYCLE READ STRING %IF ST = 'CARD' %THEN %EXIT SKIP LINES(1) %REPEAT SKIP LINES(3) %CYCLE READ STRING ALLOCATE LIST S = NEXTSYMBOL %IF S = ' ' %THEN ALLOCATE LIST %IF S = '#' %THEN %EXIT %REPEAT SKIPLINES(8) %END %ROUTINE READ WIRING ! ! READS WIREING LIST ONTO A LIST OF LISTS. ! WIRING LISTS ARE FORMED INTO A ! STANDARD FORMAT:- ! LAST OUTPUT PIN,NEXT MAIN INPUT PIN,SECONDARY ! INPUT PINS, OTHER PINS ! %INTEGER D, S %INTEGERFN NEXT LIST %INTEGER C, N, S, I, J, TYPE %SWITCH SW(1 : 13) %INTEGER OUTS, MINS, INS, OTHERS %INTEGERFN NEXTPIN %CONSTBYTEINTEGERARRAY VAL('A' : 'V') = %C %C 0,2,4,6,8,10,12,14,100,16,18, 20,22,24,100,26,100,28,30,32,34,36 S = ' ' READ SYMBOL(S) %C %WHILE S = ' ' %OR S = '=' %OR S = '>' %OR S = '<' %C %OR S = '*' %RESULT = 0 %IF S = NL %IF 'A' <= S <= 'F' %THEN I = S-'A'+10 %ELSE I = S-'0' READSYMBOL(S) I = I+16*(S-'A') READ SYMBOL(J) READ SYMBOL(S) J = VAL(J)+S-'0' %RESULT = I<<16+J %END OUTS = 0 MINS = 0 INS = 0 OTHERS = 0 %IF NEXTSYMBOL = '#' %THEN %RESULT = -1 %CYCLE C = 1, 1, 12 READ SYMBOL(S) %RESULT = 0 %IF S = NL %REPEAT %CYCLE N = NEXTPIN %IF N = 0 %THEN %EXIT TYPE = PINS(I, J) %IF TYPE = -64 %THEN %START PUSH(N, OUTS) PUSH(N, STARTS) -> REPT %FINISH %IF 0 < TYPE < 14 %THEN %START -> SW(TYPE) SW(2): SW(4): SW(6): SW(8): SW(10): SW(12): PUSH(N, OUTS) -> END SW(1): SW(7): SW(9): SW(13): BACKWARDPUSH(N, MINS) -> END SW(11): PUSH(N, MINS) -> END SW(3): SW(5): BACKWARDPUSH(N, INS) END: %FINISH %ELSE BACKWARDPUSH(N, OTHERS) REPT: %REPEAT CONCAT(OUTS, MINS) CONCAT(OUTS, INS) CONCAT(OUTS, OTHERS) %RESULT = OUTS %END WIRES = 0 D = 1 %CYCLE D = NEXTLIST %IF D = -1 %THEN %EXIT %IF D # 0 %THEN BACKWARD PUSH(D, WIRES) ! SKIP BLANK LINE %EXIT %IF NEXTSYMBOL = '#' READ SYMBOL(S) %UNTIL S = NL %REPEAT %END %ROUTINE PRINT LIST(%INTEGER P1, NSPACES) %INTEGER P2, C1, C2 P2 = P1 SPACES(NSPACES) %WHILE P1 # 0 %CYCLE PRINT PIN(DATA(P1), 1, 1) SPACES(2) P1 = LINK(P1) %REPEAT NEWLINE SPACES(NSPACES) %WHILE P2 # 0 %CYCLE C1 = DATA(P2)>>16 C2 = DATA(P2)&X'FF' PRINTSTRING(TXT(PINS(C1, C2)).' ') P2 = LINK(P2) %REPEAT NEWLINE %END %ROUTINE PRINT WIRING %INTEGER P, L L = WIRES %UNTIL L = 0 %CYCLE P = DATA(L) PRINT LIST(P, 0) L = LINK(L) NEWLINE %REPEAT %END %ROUTINE DRAW EVOKE(%INTEGER STPIN) SPACES(13) PRINT PIN(STPIN, 0, 1) PRINT STRING(' *********O********* * ') PRINT PIN(STPIN, 1, 0) PRINT STRING(' * * *') PRINT STRING(' * * *********O********* ') PRINT PIN(NEXT PIN START(STPIN, '?'), 0, 1) NEWLINE %END %ROUTINE DRAW 2 BRANCH(%INTEGER STPIN) SPACES(12) PRINT STRING('0 ') PRINT PIN(PICT(1), 0, 1) PRINT STRING(' * * * * ') PRINT PIN(PICT(2), 0, 1) PRINT STRING(' * ') PRINT PIN(STPIN, 1, 0) PRINT STRING(' * ') PRINT PIN(PICT(3), 0, 1) PRINT STRING(' * <0>*O * * * * *<1>*') PRINTSTRING(' O ') PRINT PIN(PICT(4), 0, 1) NEWLINE %END %ROUTINE DRAW SUBROUTINE(%INTEGER STPIN) SPACES(14) PRINT PIN(PICT(1), 0, 1) PRINT STRING(' ******O****** * * * ') PRINT PIN(STPIN, 1, 0) PRINT STRING(' * ') PRINT PIN(PICT(2), 0, 1) PRINT STRING(' * O ') PRINT PIN(PICT(3), 0, 1) PRINT STRING(' * * O * ******O****** ') SPACES(14) PRINT PIN(PICT(4), 0, 1) NEWLINE %END %ROUTINE DRAW 8 BRANCH(%INTEGER STPIN) %STRING (40) S %INTEGER S2 S = '2 * ' S2 = STPIN&X'FF' %IF S2 = 11 %THEN S = '1 * ' SPACES(18) PRINT PIN(STPIN, 0, 1) PRINTSTRING(' *********O**************** ') PRINTSTRING(' *(4) H') SPACES(15) PRINT PIN(STPIN, 1, 0) PRINT STRING(' * ') PRINTSTRING(' *(2) J'.S) PRINT STRING(' *(0) K'.S) S = ' *V2 U2 S2 R2 P2 N2 M2 L2 * ' %IF S2 = 11 %THEN S = ' *V1 U1 S1 R1 P1 N1 M1 L1 * ' PRINTSTRING(S.' **O**O**O**O**O**O**O**O** ') NEWLINE %END %ROUTINE DRAW MERGE(%INTEGER TYPE, STPIN) %IF TYPE = 2 %THEN %START SPACES(4) PRINT PIN(PICT(1), 0, 1) PRINT STRING(' * * ') PRINT PIN(PICT(2), 0, 1) PRINT STRING(' **O O** * ***** * ') %FINISH %ELSE %START SPACES(3) PRINT PIN(PICT(1), 0, 1) PRINT STRING(' * * ') PRINT PIN(PICT(2), 0, 1) PRINT STRING(' ') PRINT PIN(PICT(4), 0, 1) PRINT STRING(' **O O** ') PRINT PIN(PICT(5), 0, 1) PRINT STRING(' * *O*O* * ') %FINISH PRINT STRING(' * * * ') PRINT PIN(STPIN, 1, 0) PRINT STRING(' * * * ') PRINT STRING(' * * * * O ') PRINT PIN(PICT(3), 0, 1) NEWLINE %END %ROUTINE DRAW MODULE(%INTEGER STPIN) %CONSTBYTEINTEGERARRAY BR2MAP(1 : 38) = %C 0(14),93,0(3),97,0(3),101,0(3),105, 0(3),109,0(5),113,0 %CONSTBYTEINTEGERARRAY SRMAP(1 : 38) = %C 0(14),65,0(3),69,0(3),73,0(2),77,81, 0(3),85,0(5),89,0 %CONSTBYTEINTEGERARRAY M2MAP(1 : 38) = %C 0(4),1,0(5),4,7,0(6),10,13, 0(4),16,19,0(4),22,25,0(5),28 %CONSTBYTEINTEGERARRAY M4MAP(1 : 38) = %C 0(8),25,0(8),30,0(2),35, 0(6),40,0(2),45,0(6),50 %INTEGER C, C1, S1, S2, OUT, TYPE S1 = STPIN>>16&X'FF' S2 = STPIN&X'FF' TYPE = PINS(S1, S2) %IF TYPE = 3 %OR TYPE = 5 %THEN %START OUT = NEXT PIN START(STPIN, '?') OUT = OUT&X'FF' %IF TYPE = 3 %THEN %START ! 2 MERGE C = M2 MAP(OUT) %CYCLE C1 = 0, 1, 2 PICT(C1+1) = P(C+C1) %REPEAT DRAW MERGE(2, STPIN) %RETURN %FINISH ! FOUR MERGE, TYPE=5 ! EVOKE MODULE 4 MERGES GET ! SPECIAL TREATMENT. %IF S1 = 32 %OR S1 = 33 %OR 46 <= S1 <= 49 %OR S1 = 62 %C %OR S1 = 63 %THEN C = M4MAP(OUT) %ELSE %START C = 60 %IF OUT = 31 %THEN C = 55 %FINISH %CYCLE C1 = 0, 1, 4 PICT(C1+1) = P(C+C1) %REPEAT DRAW MERGE(4, STPIN) %RETURN %FINISH %IF TYPE = 9 %THEN DRAW 8 BRANCH(STPIN) %AND %RETURN %IF TYPE = 11 %THEN %START C = SRMAP(S2) %CYCLE C1 = 0, 1, 3 PICT(C1+1) = P(C+C1) %REPEAT DRAW SUBROUTINE(STPIN) %RETURN %FINISH %IF TYPE = 7 %THEN %START ! 2 BRANCH IN C = BR2MAP(S2) %CYCLE C1 = 0, 1, 3 PICT(C1+1) = P(C+C1) %REPEAT DRAW 2 BRANCH(STPIN) %RETURN %FINISH %IF TYPE = 1 %THEN DRAW EVOKE(STPIN) %END %ROUTINE THREAD LIST %INTEGER START, OUT, N, L, NLS, IN, SUB STARTS, SFLAG SFLAG = 0 SUB STARTS = 0 PRINT STRING(' ') 1: %WHILE STARTS # 0 %CYCLE START = POP(STARTS) N = LIST WITH(START) %IF N = 0 %THEN -> REPT NLS = 1 %IF SFLAG = 0 %THEN %START ! PRINT START PIN IF NOT IN SUBROUTINE. PRINT STRING(' (') PRINT PIN(START, 1, 1) PRINTSYMBOL(')') NEWLINE %FINISH PRINT LIST(N, 30) NEWLINE %CYCLE L = LINK(N) %IF L = 0 %THEN %START PRINT PIN(DATA(N), 1, 1) %PRINTTEXT ' LIST LNGTH 1.' NEWLINE %EXIT %FINISH IN = DATA(L) OUT = NEXT PIN START(IN, 1) %IF OUT = 0 %THEN %START PRINT STRING(' (') PRINT PIN(IN, 1, 1) PRINT STRING(') ') %EXIT %FINISH ! SUBROUTINE START PIN? %IF PINS(IN>>16, IN&X'FF') = 11 %C %THEN PUSH(DATA(LINK(L)), SUB STARTS) DRAW MODULE(DATA(L)) N = LIST WITH(OUT) %IF N = 0 %THEN %START %PRINTTEXT 'NO LIST CONTAINS ' PRINT PIN(OUT, 1, 1) %EXIT %FINISH PRINT LIST(N, 30) %REPEAT REPT: NEWLINES(6) %REPEAT SFLAG = 1 %WHILE SUB STARTS # 0 %CYCLE IN = POP(SUB STARTS) OUT = NEXT PIN START(IN, 1) %IF OUT # 0 %THEN %START PRINT STRING('SUBROUTINE ENTRY POINT. ') DRAW MODULE(IN) PUSH(OUT, STARTS) -> 1 %FINISH %REPEAT %END INFILE = S OUT FILE = '' %UNLESS S -> INFILE.('/').OUTFILE PRINTSTRING('PARAM:'.S.' ') %AND %STOP %IF INFILE = '' OUTFILE='.TT' %IF OUTFILE = '' DEFINE('STREAM03,'.INFILE) DEFINE('STREAM04,'.OUTFILE) SELECT INPUT(3) SELECT OUTPUT(4) STARTS = 0 %CYCLE ASL = 1, 1, 1024 LINK(ASL) = ASL-1 DATA(ASL) = 0 %REPEAT READ MODULE POSNS ALLOCATE READ WIRING THREAD LIST PRINT WIRING %END %ENDOFFILE