!!! ******* ** ***** !!! ** ** ** ** !!! ** ** ** ** !!! ***** ** ** ** !!! ** ** ** ** !!! ** ** ** ** !!! ** ******* ***** %CONTROL 0 %EXTERNALROUTINE FLO(%STRING (63) S) %STRING (63) INFILE, OUTFILE %EXTERNALROUTINESPEC DEFINE(%STRING (63) S) ! ! FRONT PANEL USEAGE INFO. ! %SHORTINTEGERARRAY PINS(0:63,1:36) ! ! 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 (10) %ARRAY TXT(0 : 87) = %C 'UNUSED ','EVOKE IN ','EVOKE OUT ','4 OR IN ','4 OR OUT ', 'SRET IN ','ENDSUB ','SRET OUT ','2 OR IN ','2 OR OUT ', 'NOP ','SC ','BD ','<=MANSTART','NORMAL MS ', 'MANSTART<=','AUTO ','MANUAL ','SINGLE STP','NORMAL SS ', 'OVERFLOW<=','NEGATIVE ','<=BSR ','<=0 ','ZERO ', 'POSITIVE ','OVERFLOW ','INT<= ','<=INT ','OVERUN ', 'KF ','PF ','SO ','PRINT ','DA ', 'ENABLE ','SI ','READ ','B<0> ','B<15> ', 'B<= ','A<= ','<=CONST ','LOW BYTE<=','TOP BYTE<=', '<=LOW BYTE','<=TOP BYTE','BREG<= ','<=BREG ','<=BR<0:11>', '<=BR<0:7> ','<=BR<0:3> ','BRANCH IN ','BRANCH 4 ','BRANCH 2 ', 'BRANCH 1 ','2 BR OUT 1','2 BR OUT 0','2 BR COND ','2BR IN ', 'FFDA ','FFDATA<= ','FF0<= ','FFCOMP ','FFDATA ', 'FFSET1 ','FF1<= ','FFSET0 ','A*2 ','A+1 ', '<=A ','RSI ','A!!B ','<=B ','\B ', '\A ','A+B ','A-1 ','(...)/2 ','A&B ', 'A!B ','LSI ','A-B ','<=SPREG ','SPREG<= ', 'MEMADR<= ','<=MEM ','MEM<= ' ! ! MODULE PIN USEAGE INFO. ! %STRINGFN PINTEXT(%INTEGER I) %INTEGER N %CONSTSTRING(1)%ARRAY NUMBER(0:15)=%C '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' %CONSTSTRING(7)%ARRAY BTEXT(0:11)=%C 'BUS<','IN<','OUT<','AREG<','TREG<','BREG<','BRANCH<','SPREG#', 'CONST#'(4) %CONSTSTRING(6)%ARRAY BTEXT1(0:11)=%C '> ','> ','> ','> '(3),'> ',' ','_W ','_L ','_U ','_UL' %IF I >= 0 %THEN %RESULT = TXT(I) I = -I-1 N = I&15 I = I>>4 %RESULT = BTEXT(I).NUMBER(N).BTEXT1(I) %END %CONSTSHORTINTEGERARRAY PINSPEC(1 : 936) = %C 0(7),11,0,1,0,2,0,1,3,2,3,1,3,2,3,12,4,5,3,6,3,7,4,1,0,2,3,1,3,2, 8,0,8,0,9,0,8(4),9(2),8(4),9(2),8(4),9(2),8(4),9(2),0,8,0,8,0,9, 0(7),10,0,10(3),10(5),0,10(12),0,10(2),0,10,0, 0(9),6,11,7,5,6,11,7,5,6,11,7,5,6,11,7,5,6,11,7,5,6,0(2),11,0,5,12, 3,0,3,0,3,0,3(2),4,3(3),3(3),4,3(2),4,3(6),4,3(2),4,3,0,3,0,3,0,4, 0(3),13,0(3),16,0,17,18,14,19,20,15,20,0,20(4),21,20,22,20,22(2), 23,22,23,0,24,23,25,23,26, 0(7),-5,0,-4,0,-8,0,-1,0,-2,0,-7,0,-3,0,-6,0,-9, 0,-12,0,-14,0,-15,0,-16,0,-13,-10,-11, 0(7),-63,0,-64,0,39,0(2),40(8),41(8),0(6), 0(3),38,0(3),-49,0,-50,0,-51,0,-52,0,-53,0,-54,0,-55,0,-56,0,-57, 0,-58,0,-59,0,-60,0,-61,0,-62,0(2), 0(9),27,28,27,28,27,28,27,28,-47,-37,-48,-38,-45,-35,-46,-36,-43,-33, -44,-34,-41,0,-42,0,-39,0,-40, 0(3),-17,0(3),-18,0,-19,0,-20,0,-21,0,-22,0,-23,0,-24,0,-25, 0,-26,0,-27,0,-28,0,-29,0,-30,0,-31,0,-32, 0(10),33,0,33,0,33,0,33,0,34,35,36,35,0,35,0, 35,0,37,0,37,0,37,0,37,0(19),29,0,30,0,31,0,32,0(12), 0(18),-130,-148,-162,-180,-163,-149,-131,-181,-178,-133,-146,-132, 0,0,-179,-164,-147,-165, 0(7),-79,0,-80,43,-78,0,-77,0,43,0,44,0,44,0(9),45,0,45,46,0,46,0, 0(7),-67,0,-68,0,-66,0,-65,0,-71,0,-72,0,-70,0,-69,0,-75,0,-76,0,-74,0, -73,0(6), 0(7),47,0,47,0,47,0,47,0(4),48,0,48,0,49,0,49,0,50,0,50,0(3),51,0,51,0, 0(7),-81,0,-82,0,-83,0,-84,0,-85,0,-86,0,-87,0,-88,0,-89,0,-90,0, -91,0,-92,0,-93,0,-94,-96,-95, 0(10),52(2),53(2),54(2),55(2),-104(2),-103(2),-102(2),-101(2), -100(2),-99(2),-0(2),-98(2),-97(2), 0(7),56,0,57,58,56,59,57,58,56,59,57,58,56,59,57,58,56,59,57,58,56,59, 57,0(2),58,0,59,0, 0(7),60,0,60,61,62,63,0,64,65,66,0,67(2),66,65,64,62,63,65, 61(2),60,63,0,64,62,67,66,67, 0(3),73,0(3),73,0,73,74,73,74(2),75,74,75,76,75,77,75,77(3),78,76, 78,76,78(2),0,79,78,80,81,82, 0(11),68,0,68,0,68,0,68,0,69,0,69,0,69,0,69,0,70,0,70,0,70,0,70,71,72, 0(3),-115,0(3),-119,0,-119,-120(2),-117(2),-118,-114,-118,-114, -124,-116,-124,-116,-126,-122,-126,-122,-125,-121,-125,-121,0(2),-123, -127,-123,-127, 0(9),83,0,83,0,83,0,83,0,84,0,84,0(3),84,0(3),84,0,-113,0,-113,0,-115, 0(2), 0(7),85,0,85,86,85,86,85,86,0,86,0,87,0,87,0,87,0,87,0(11) ! ! MAPS PIN NOS. TO CORRESP. LETTER ! %CONSTBYTEINTEGERARRAY VAL(1 : 18) = %C 'A','B','C','D','E','F','H','J', 'K','L','M','N','P','R','S','T', 'U','V' ! ! PINS USED BY DRAWING ROUTINES ! %CONSTBYTEINTEGERARRAY P(1 : 116) = %C 1,3,5,7,9,11,8,10,12, 13,15,17,14,16,18,19,21,23, 20,22,24,25,27,29, 1,7,9,3,5,8,14,16,10,12, 11,17,19,13,15,18,24,26,20,22, 21,27,29,23,25,28,34,36,30,32, 35,27,29,33,25,21,15,23,19,17, 13,10,11,8, 17,14,15,12, 21,18,19,16, 24,26,8,28, 25,22,23,20,29,26,27,24, 35,30,33,28, 13,11,10,8, 17,15,14,12, 21,19,18,16, 25,23,22,20, 29,27,26,24, 35,33,30,28 %CONSTBYTEINTEGERARRAY TY(-193:87)=%C 0(89),10(8),0(96),0,1,2,5,6,11,13,12,3,4,0(3),14,0(38),9, 0(3),8,8,0,7,0(28) ! ! 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 : 20) = %C 0,36,72,108,144,180,252,324(3),396, 468,504,576,648,684,720,756,828,900 %CONSTBYTEINTEGERARRAY SINDUB(1:21)=%C 0(5),1(6),0,1(2),0(3),1(2),0(2) %ROUTINE FILL %INTEGER C %CYCLE C = 1, 1, 36 PINS(P, C) = PINSPEC(ISPEC+C) %REPEAT %END %CYCLE C1 = 0, 1, 63 %CYCLE C2 = 1, 1, 36 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 SIN DUB(TYPE) = 1 %THEN %START ! DOUBLE HEIGHT MODULE ISPEC = ISPEC+36 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>>8 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 : 21) = %C 0,1,2,0,3,4,0(9),5,6,0(5) %OWNINTEGER NOPRINTED = 1 %CONSTBYTEINTEGERARRAY OUTPT OF(1 : 144) = %C 0(9),12,0(3),16,23,0,23,20,23,0,23, 0,0,28,29,28,29,0(2),32,0,0,29, 36,29,0,5,0,5,0(3),11,12,11,12,0(2),17, 18,17,18,0(2),23,24,23,24,0(2), 29,30,29,30,0(3),36,0,36,0,0, 0(9),8,0(2),8,12,0(2),12,16,0(2),16,20, 0(2),20,0(3),24,28,0(4),28,24, 9,0,9,0,9,0,9,16,0,16, 19,16,19,16,19,0,19,26, 0,26,29,26,29,26,29,0,29,34, 0,36,0,36,0,36,0,0 %OWNINTEGERARRAY PRINTED(0 : 400) %INTEGER TYPE, I, J, NEXT, C I = THIS>>8 J = THIS&X'FF' PRINTED(0) = 0 TYPE = MAP(POSITION(I)) I = I<<8 %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)*36+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 %IF TYPE = 5 %THEN %START %IF J = 11 %THEN J = I+35 %ELSE J = I+36 PUSH(J,STARTS) %CYCLE J = J-4,-2,J-14 PUSH(J,STARTS) %REPEAT NEXT = J-I-2 %FINISH %ELSE %START ! TYPE 6, 'COND' %IF J = 13 %THEN NEXT = 8 %AND PUSH(I+10, STARTS) %IF J = 17 %THEN NEXT = 12 %AND PUSH(I+14, STARTS) %IF J = 21 %THEN NEXT = 16 %AND PUSH(I+18, STARTS) %IF J = 25 %THEN NEXT = 20 %AND PUSH(I+22, STARTS) %IF J = 29 %THEN NEXT = 24 %AND PUSH(I+26, STARTS) %IF J = 35 %THEN NEXT = 28 %AND PUSH(I+30, STARTS) %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 (6) %ARRAY TYPE(0 : 21) = %C 'UNUSED', 'EVOKE','MERGE2','NOP','RTCALL','MERGE4','BSENSE', 'GPAUR','GPINT','OPINT','IPINT','SINT','CGEN','TREG', 'BREG','BRANCH','COND','FLAG','GPAUC','SPREG','MEMORY','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,I %CYCLE MTYPE = 21, -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 I = 1 %CYCLE R:READ SYMBOL(S) %UNTIL S # ' ' %IF S = NL %OR S = ':' %START %IF S = ':' %START SKIPLINES(1); ! REMOVE ALL CGENS I = 9; ! IE SET UP DUMMY %FINISH %IF NEXTSYMBOL = ' ' %AND I = 9 %THEN %C I = 1 %AND ->R %ELSE %EXIT ! LIST TO BE CONTINUED %FINISH %IF '0' <= S <= '9' %THEN N = S-'0' %ELSE N = S-'A'+10 READ SYMBOL(S) POSITION(N+(S-'A')*16) = MTYPE I = I+1 %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 : 14) %INTEGER OUTS, MINS, INS, OTHERS %INTEGERFN NEXTPIN %CONSTBYTEINTEGERARRAY VAL('A' : 'V') = %C 0,2,4,6,8,10,100,12,100,14,16,18, 20,22,100,24,100,26,28,30,32,34 S = ' ' R:READ SYMBOL(S) %C %WHILE S = ' ' %OR S = '=' %OR S = '>' %OR S = '<' %IF S = '*' %START READSYMBOL(S) %UNTIL S = ' ' %OR S = NL ! GET RID OF *LO* AND *HI* AND **** ->R %FINISH %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<<8+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 = TY(PINS(I, J)) %IF 0 < TYPE < 15 %THEN %START -> SW(TYPE) SW(14): PUSH(N,OUTS) PUSH(N,STARTS) ->END 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) %INTEGER P2, C1, C2 P2 = P1 SPACES(30) %WHILE P1 # 0 %CYCLE PRINT PIN(DATA(P1), 1, 1) SPACES(8) P1 = LINK(P1) %REPEAT NEWLINE SPACES(30) %WHILE P2 # 0 %CYCLE C1 = DATA(P2)>>8 C2 = DATA(P2)&X'FF' PRINTSTRING(PINTEXT(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) 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 : 36) = %C 0(12),93,0(3),97,0(3),101,0(3),105, 0(3),109,0(5),113,0 %CONSTBYTEINTEGERARRAY SRMAP(1 : 36) = %C 0(12),65,0(3),69,0(3),73,0(2),77,81, 0(3),85,0(5),89,0 %CONSTBYTEINTEGERARRAY M2MAP(1 : 36) = %C 0(4),1,0(5),4,7,0(4),10,13, 0(4),16,19,0(4),22,25,0(5),28 %CONSTBYTEINTEGERARRAY M4MAP(1 : 36) = %C 0(8),25,0(6),30,0(2),35, 0(6),40,0(2),45,0(6),50 %INTEGER C, C1, S1, S2, OUT, TYPE S1 = STPIN>>8&X'FF' S2 = STPIN&X'FF' TYPE = TY(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 = 29 %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) NEWLINE %CYCLE L = LINK(N) %IF L = 0 %THEN %START PRINT PIN(DATA(N), 1, 1) %PRINTTEXT ' LIST LENGTH 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 TY(PINS(IN>>8, 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) %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) SET MARGINS(4,1,132) STARTS = 0 %CYCLE ASL = 1, 1, 1024 LINK(ASL) = ASL-1 DATA(ASL) = 0 %REPEAT PRINTSTRING('FLO : VERSION 2.0 === = ======= ===') NEWLINES(3) READ MODULE POSNS ALLOCATE READ WIRING THREAD LIST PRINT WIRING NEWLINES(3) PRINTSTRING(' ========================= END OF FLO =================================== ') NEWLINES(2) %END %ENDOFFILE