!----------------------------------------------------------------------- %EXTERNALROUTINE SORTPL(%STRING(63) S) %EXTERNALROUTINESPEC DEFINE(%STRING(63) S) %ROUTINESPEC SQS(%INTEGER FROM,TO) %RECORDFORMAT PSF(%STRING(7) P,%STRING(23) S) %RECORDARRAY PS(1:3000)(PSF) %STRING(31) IN,OUT,T,U %INTEGER I,PSN S->IN.(",").OUT DEFINE("STREAM01,".IN) SELECT INPUT(1) %CYCLE I=1,1,3000 READ ITEM(T) %UNTIL "A"<=T<="Z" ->SORT %IF T="Z" ;! END MARKER READ ITEM(U) %AND T=T.U %UNTIL NEXT ITEM=" " PS(I)_P=T READ ITEM(T) %UNTIL T#" " READ ITEM(U) %AND T=T.U %UNTIL NEXT ITEM=" " PS(I)_S=T %REPEAT PRINT STRING("TOO MUCH DATA") %STOP SORT:PSN=I-1 SQS(1,PSN) DEFINE("STREAM02,".OUT) SELECT OUTPUT(2) %CYCLE I=1,1,PSN %IF CHARNO(PS(I)_S,1)='#' %THEN NEWLINE PRINT STRING(PS(I)_P) SPACES(8-LENGTH(PS(I)_P)) PRINT STRING(PS(I)_S." ") %REPEAT PRINT STRING(" Z ") %STOP !----------------------------------------------------------------------- %ROUTINE SQS(%INTEGER FROM,TO) %RECORD PST(PSF) %INTEGER L,U L=FROM U=TO PST=PS(U) ->IN %CYCLE %UNTIL PS(L)_P>PST_P %CYCLE L=L+1 %IF L=U %THEN ->OUT IN: %REPEAT PS(U)=PS(L) %UNTIL PS(U)_POUT %REPEAT PS(L)=PS(U) %REPEAT OUT:PS(U)=PST SQS(FROM,U-1) %IF FROMU+1 %END %END !----------------------------------------------------------------------- %EXTERNALROUTINE SORTSIG(%STRING(63) S) %EXTERNALROUTINESPEC DEFINE(%STRING(63) S) %ROUTINESPEC SQS(%INTEGER FROM,TO) %ROUTINESPEC SQP(%INTEGER FROM,TO) %RECORDFORMAT PSF(%STRING(7) P,%STRING(23) S) %RECORDARRAY PS(1:3000)(PSF) %STRING(31) IN,OUT,T,U %INTEGER I,J,K,PSN S->IN.(",").OUT DEFINE("STREAM01,".IN) SELECT INPUT(1) %CYCLE I=1,1,3000 READ ITEM(T) %UNTIL "A"<=T<="Z" ->SORT %IF T="Z" ;! END MARKER READ ITEM(U) %AND T=T.U %UNTIL NEXT ITEM=" " PS(I)_P=T READ ITEM(T) %UNTIL T#" " READ ITEM(U) %AND T=T.U %UNTIL NEXT ITEM=" " PS(I)_S=T %REPEAT PRINT STRING("TOO MUCH DATA") %STOP SORT:PS(I)_S="" PSN=I-1 SQS(1,PSN) DEFINE("STREAM02,".OUT) SELECT OUTPUT(2) I=1 %UNTIL I>PSN %CYCLE J=I T=PS(I)_S I=I+1 %UNTIL T#PS(I)_S SQP(J,I-1) %IF JIN %CYCLE %UNTIL PS(L)_S>PST_S %CYCLE L=L+1 %IF L=U %THEN ->OUT IN: %REPEAT PS(U)=PS(L) %UNTIL PS(U)_SOUT %REPEAT PS(L)=PS(U) %REPEAT OUT:PS(U)=PST SQS(FROM,U-1) %IF FROMU+1 %END !----------------------------------------------------------------------- %ROUTINE SQP(%INTEGER FROM,TO) %RECORD PST(PSF) %INTEGER L,U L=FROM U=TO PST=PS(U) ->IN %CYCLE %UNTIL PS(L)_P>PST_P %CYCLE L=L+1 %IF L=U %THEN ->OUT IN: %REPEAT PS(U)=PS(L) %UNTIL PS(U)_POUT %REPEAT PS(L)=PS(U) %REPEAT OUT:PS(U)=PST SQP(FROM,U-1) %IF FROMU+1 %END %END !----------------------------------------------------------------------- %REALFN DISTANCE(%REAL X1,Y1,X2,Y2) %RESULT=SQRT((X1-X2)**2+(Y1-Y2)**2) %END !----------------------------------------------------------------------- %EXTERNALROUTINE GETPOSN(%STRING(63) S) %EXTERNALROUTINESPEC DEFINE(%STRING(63) S) %ROUTINESPEC SQS(%INTEGER FROM,TO) %RECORDFORMAT PSF(%STRING(4) P,%STRING(23) S) %RECORDARRAY PS(1:3000)(PSF) %STRING(31) IN,OUT,T,U %INTEGER B,I,J,K,G,C,N,P1,P2,P,PSN %REAL X,Y %OWNBYTEINTEGERARRAY VCCUSE('A':'F',1:4,1:6) %OWNBYTEINTEGERARRAY GNDUSE('A':'F',1:4,1:6) %CONSTBYTEINTEGERARRAY VGCOL(1:4)='B','D','F','H' %CONSTREALARRAY XGROUP('A':'F')=15.9,13.2,10.5,7.8,5.1,2.4 %CONSTREALARRAY XCOL('A':'J')=0,-.3,-.6,-.9,-1.2,-1.5,-1.8,-2.1,999,-2.4 %CONSTREALARRAY YROW(1:50)= %C 4.9,4.8,4.7,4.6,4.5,4.4,4.3,4.2,4.1,4.0, 3.9,3.8,3.7,3.6,3.5,3.4,3.3,3.2,3.1,3.0, 2.9,2.8,2.7,2.6,2.5,2.4,2.3,2.2,2.1,2.0, 1.9,1.8,1.7,1.6,1.5,1.4,1.3,1.2,1.1,1.0, 0.9,0.8,0.7,0.6,0.5,0.4,0.3,0.2,0.1,0.0 %CONSTREALARRAY XEDGE(1:46)= %C -2.2,-2.1,-2.0,-1.9,-1.8,-1.7,-1.6,-1.5,-1.4,-1.3,-1.2,-1.1,-1.0, -0.9,-0.8,-0.7,-0.6,-0.5,-0.4,-0.3,-0.2,-0.1,0,-2.2,-2.1,-2.0,-1.9, -1.8,-1.7,-1.6,-1.5,-1.4,-1.3,-1.2,-1.1,-1.0,-0.9,-0.8,-0.7,-0.6, -0.5,-0.4,-0.3,-0.2,-0.1,0 %CONSTREALARRAY YEDGE(1:46)=5.6(23),5.3(23) %CONSTREALARRAY XVG(1:4)=-0.4,-1.0,-1.6,-2.2 %CONSTREALARRAY YVCC(1:6)=4.2,3.4,2.6,1.8,1.0,0.2 %CONSTREALARRAY YGND(1:6)=4.6,3.8,3.0,2.2,1.4,0.6 S->IN.(",").OUT DEFINE("STREAM01,".IN) SELECT INPUT(1) %CYCLE I=1,1,3000 READ SYMBOL(G) %UNTIL 'A'<=G<='Z' ->SORT %IF G='Z' READ SYMBOL(C) READ SYMBOL(P1) ; READ SYMBOL(P2) P=10*(P1-'0')+P2-'0' PS(I)_P=TOSTRING(G).TOSTRING(C).TOSTRING(P1).TOSTRING(P2) READ ITEM(T) %UNTIL T#" " READ ITEM(U) %AND T=T.U %UNTIL NEXT ITEM=" " %IF T="GND" %OR T="VCC" %THEN %START %IF C='&' %THEN %START %IF P>23 %THEN P=P-23 J=4-(P-1)//6 K=1 %FINISH %ELSE %START J=(C-'A')//2+1 %IF J=5 %THEN J=4 K=(P-1)//8+1 %IF K=7 %THEN K=6 %FINISH %IF T="GND" %THEN GNDUSE(G,J,K)=1 %ELSE VCCUSE(G,J,K)=1 T=T.TOSTRING(G).TOSTRING(VGCOL(J)).TOSTRING(K+'0') %FINISH PS(I)_S=T %REPEAT PRINT STRING("TOO MUCH DATA") %STOP SORT:! INSERT GND AND VCC PINS USED %CYCLE G='A',1,'F' %CYCLE J=1,1,4 %CYCLE K=1,1,6 %IF VCCUSE(G,J,K)#0 %THEN %START PS(I)_P=TOSTRING(G).TOSTRING(VGCOL(J))."V".TOSTRING(K+'0') PS(I)_S="VCC".TOSTRING(G).TOSTRING(VGCOL(J)).TOSTRING(K+'0') I=I+1 %FINISH %IF GNDUSE(G,J,K)#0 %THEN %START PS(I)_P=TOSTRING(G).TOSTRING(VGCOL(J))."G".TOSTRING(K+'0') PS(I)_S="GND".TOSTRING(G).TOSTRING(VGCOL(J)).TOSTRING(K+'0') I=I+1 %FINISH %REPEAT %REPEAT %REPEAT PS(I)_S="" PSN=I-1 SQS(1,PSN) DEFINE("STREAM02,".OUT) SELECT OUTPUT(2) I=1 %UNTIL I>PSN %CYCLE J=I T=PS(I)_S I=I+1 %UNTIL T#PS(I)_S PRINT STRING(T."/") N=I-J WRITE(N,1) NEWLINE %IF N<=1 %THEN PRINT STRING(" NET CONTAINING ONLY ONE PIN ? ") %AND ->SKIP B=J-1 %BEGIN %REALARRAY D,DD(1:N,1:N),X,Y(1:N) %INTEGERARRAY RT(1:2*N) %INTEGER E,I,J,IP,JP,LD,RD,LP,RP,LN,RN %REAL M,LM,RM,LDD,RDD,DIJ %CYCLE I=1,1,N U=PS(I+B)_P G=CHARNO(U,1) C=CHARNO(U,2) P1=CHARNO(U,3) P2=CHARNO(U,4) %IF '0'<=P1<='9' %THEN %START P=10*(P1-'0')+P2-'0' %IF C='&' %THEN %START X(I)=XGROUP(G)+XEDGE(P) Y(I)=YEDGE(P) %FINISH %ELSE %START X(I)=XGROUP(G)+XCOL(C) Y(I)=YROW(P) %FINISH %FINISH %ELSE %START C=(C-'A'+1)//2 X(I)=XGROUP(G)+XVG(C) %IF P1='V' %THEN Y(I)=YVCC(P2-'0') %ELSE Y(I)=YGND(P2-'0') %FINISH %REPEAT M=99 %CYCLE I=1,1,N-1 DD(I,I)=99 %CYCLE J=I+1,1,N DIJ=DISTANCE(X(I),Y(I),X(J),Y(J)) %IF DIJ<0.099 %THEN PRINT STRING(" PINS CLOSE TOGETHER ???? ") D(I,J)=DIJ ; D(J,I)=DIJ ; DD(I,J)=DIJ ; DD(J,I)=DIJ %IF DIJ3 %THEN %START %CYCLE J=1,1,N-3 LD=RT(LP) LDD=D(LD,RT(LP+1)) LM=0 %CYCLE I=LP+2,1,RP-1 M=LDD+D(RT(I),RT(I+1))-D(LD,RT(I))-D(LD,RT(I+1)) %IF M>LM %THEN LM=M %AND LN=I %REPEAT %IF LM=0 %THEN %EXIT %CYCLE I=LP,1,LN-1 RT(I)=RT(I+1) %REPEAT RT(LN)=LD %REPEAT %CYCLE J=1,1,N-3 RD=RT(RP) RDD=D(RD,RT(RP-1)) RM=0 %CYCLE I=RP-2,-1,LP+1 M=RDD+D(RT(I),RT(I-1))-D(RD,RT(I))-D(RD,RT(I-1)) %IF M>RM %THEN RM=M %AND RN=I %REPEAT %IF RM=0 %THEN %EXIT %CYCLE I=RP,-1,RN+1 RT(I)=RT(I-1) %REPEAT RT(RN)=RD %REPEAT %FINISH %CYCLE I=1,1,N J=RT(LP+I-1) PRINT STRING(PS(J+B)_P) PRINT(X(J),6,1) PRINT(Y(J),4,1) NEWLINE %REPEAT %END NEWLINE SKIP:%REPEAT PRINT STRING("Z ") %STOP !----------------------------------------------------------------------- %ROUTINE SQS(%INTEGER FROM,TO) %RECORD PST(PSF) %INTEGER L,U L=FROM U=TO PST=PS(U) ->IN %CYCLE %UNTIL PS(L)_S>PST_S %CYCLE L=L+1 %IF L=U %THEN ->OUT IN: %REPEAT PS(U)=PS(L) %UNTIL PS(U)_SOUT %REPEAT PS(L)=PS(U) %REPEAT OUT:PS(U)=PST SQS(FROM,U-1) %IF FROMU+1 %END %END !----------------------------------------------------------------------- %EXTERNALROUTINE GETPIN(%STRING(63) S) %EXTERNALROUTINESPEC DEFINE(%STRING(63) S) %ROUTINESPEC SQS(%INTEGER FROM,TO) %RECORDFORMAT PSF(%STRING(4) P,%STRING(23) S) %RECORDARRAY PS(1:3000)(PSF) %STRING(31) IN,OUT,T,U %INTEGER I,G,C,P1,P2,P,Q,N,PSN S->IN.(",").OUT DEFINE("STREAM01,".IN) SELECT INPUT(1) DEFINE("STREAM02,".OUT) SELECT OUTPUT(2) %CYCLE I=1,1,3000 FIRST:READ SYMBOL(G) %UNTIL 'A'<=G<='Z' %IF G='Z' %THEN ->SORT READ SYMBOL(C) READ SYMBOL(P1) ; READ SYMBOL(P2) %IF NEXT SYMBOL=' ' %THEN %START READ SYMBOL(N) %UNTIL N='/' READ(N) ->FIRST %FINISH P=10*(P1-'0')+P2-'0' READ(Q) %IF C='&' %THEN %START %IF Q<=N/2 %THEN P=P+Q-1 %ELSE P=P+N-Q+23 %FINISH %ELSE %START %IF Q<=N/2 %THEN P=P+Q-1 %ELSE %START P=P+N-Q %IF N<24 %THEN C=C+1 %ELSE C=C+2 %IF C='I' %THEN C='J' %FINISH %FINISH P1=P//10+'0' P2=P-10*(P1-'0')+'0' PS(I)_P=TOSTRING(G).TOSTRING(C).TOSTRING(P1).TOSTRING(P2) READ ITEM(T) %UNTIL "A"<=T<="Z" READ ITEM(U) %AND T=T.U %UNTIL NEXT ITEM=" " PS(I)_S=T %REPEAT PRINT STRING("TOO MUCH DATA") %STOP SORT:PSN=I-1 SQS(1,PSN) T="" %CYCLE I=1,1,PSN U=FROM STRING(PS(I)_P,1,2) %IF T#U %THEN NEWLINE %AND T=U PRINT STRING(PS(I)_P) %IF I>1 %AND PS(I)_P=PS(I-1)_P %THEN PRINT STRING(" **** PIN USED TWICE **** ") SPACES(6-LENGTH(PS(I)_P)) PRINT STRING(PS(I)_S." ") %REPEAT PRINT STRING(" Z ") %STOP !----------------------------------------------------------------------- %ROUTINE SQS(%INTEGER FROM,TO) %RECORD PST(PSF) %INTEGER L,U L=FROM U=TO PST=PS(U) ->IN %CYCLE %UNTIL PS(L)_P>PST_P %CYCLE L=L+1 %IF L=U %THEN ->OUT IN: %REPEAT PS(U)=PS(L) %UNTIL PS(U)_POUT %REPEAT PS(L)=PS(U) %REPEAT OUT:PS(U)=PST SQS(FROM,U-1) %IF FROMU+1 %END %END !----------------------------------------------------------------------- %EXTERNALROUTINE WWPERPIN(%STRING(63) S) %EXTERNALROUTINESPEC DEFINE(%STRING(63) S) %BYTEINTEGERARRAY WW('A':'F','A':'J',1:50) %BYTEINTEGERARRAY WWE('A':'F',1:46) %BYTEINTEGERARRAY WWV,WWG('A':'F',1:4,1:6) %INTEGER I,J,K,G,C,P1,P2,P,N,WIRES %STRING(31) IN,OUT S->IN.(",").OUT DEFINE("STREAM01,".IN) SELECT INPUT(1) DEFINE("STREAM02,".OUT) SELECT OUTPUT(2) %CYCLE G='A',1,'F' %CYCLE C='A',1,'J' %CYCLE P=1,1,50 WW(G,C,P)=0 %REPEAT %REPEAT %CYCLE P=1,1,46 WWE(G,P)=0 %REPEAT %CYCLE C=1,1,4 %CYCLE P=1,1,6 WWV(G,C,P)=0 WWG(G,C,P)=0 %REPEAT %REPEAT %REPEAT WIRES=0 %CYCLE READ SYMBOL(I) %UNTIL 'A'<=I<='Z' %IF I='Z' %THEN %EXIT READ SYMBOL(I) %UNTIL I='/' READ(N) WIRES=WIRES+N-1 %CYCLE I=1,1,N READ SYMBOL(G) %UNTIL 'A'<=G<='Z' READ SYMBOL(C) READ SYMBOL(P1) READ SYMBOL(P2) %IF I=1 %OR I=N %THEN J=1 %ELSE J=2 %IF P1='V' %OR P1='G' %THEN %START C=(C-'A'+1)//2 P=P2-'0' %IF P1='V' %THEN WWV(G,C,P)=J %ELSE WWG(G,C,P)=J %FINISH %ELSE %START P=10*(P1-'0')+P2-'0' %IF C='&' %THEN WWE(G,P)=J %ELSE WW(G,C,P)=J %FINISH %REPEAT %REPEAT WRITE(WIRES,1) PRINT STRING(" WIRES ") %CYCLE G='A',1,'F' PRINT SYMBOL(G) PRINT STRING("& : ") %CYCLE P=1,1,46 WRITE(WWE(G,P),1) %REPEAT NEWLINES(2) %REPEAT %CYCLE G='A',1,'F' %CYCLE C='A',1,'J' %IF C='I' %THEN ->SKIP PRINT SYMBOL(G) PRINT SYMBOL(C) PRINT STRING(" : ") %CYCLE P=1,1,50 WRITE(WW(G,C,P),1) %REPEAT NEWLINES(2) SKIP:%REPEAT %REPEAT %CYCLE G='A',1,'F' %CYCLE C=1,1,4 PRINT SYMBOL(G) PRINT SYMBOL(C*2+'A'-1) PRINT STRING("V : ") %CYCLE P=1,1,6 WRITE(WWV(G,C,P),1) %REPEAT NEWLINES(2) %REPEAT %REPEAT %CYCLE G='A',1,'F' %CYCLE C=1,1,4 PRINT SYMBOL(G) PRINT SYMBOL(C*2+'A'-1) PRINT STRING("G : ") %CYCLE P=1,1,6 WRITE(WWG(G,C,P),1) %REPEAT NEWLINES(2) %REPEAT %REPEAT %STOP %END !----------------------------------------------------------------------- %EXTERNALROUTINE WWTAPE(%STRING(63) S) %EXTERNALROUTINESPEC DEFINE(%STRING(63) S) %ROUTINESPEC QS(%INTEGER FROM,TO) %ROUTINESPEC PRINT WRAPS(%STRING(31) FILE,%INTEGER FIRST,LAST) %STRING(4)%FNSPEC STRINT4(%INTEGER N) %STRING(4)%FNSPEC STEP(%REAL INC) %STRING(31) IN,OUT,TAPE,T,PLF,PLT %RECORDFORMAT WIREF(%STRING(4) PLF,PLT,%BYTEINTEGER L,%REAL XF,YF,XT,YT) %RECORDARRAY WIRE(1:5000)(WIREF) %INTEGER I,J,K,N,BF,BL,TF,TL,BT %REAL XF,YF,XT,YT,D %INTEGERARRAY WIRELENS(2:32) %CONSTINTEGER EOB=13 %CONSTSTRING(2)%ARRAY WIREBIN(2:32)="00","01","02","03","04","05", "06","07","10","11","12","13","14","15","16","17","20","21","22","23", "24","25","26","27","30","31","32","33","34","35","36" S->IN.(",").OUT.(",").TAPE DEFINE("STREAM01,".IN) SELECT INPUT(1) %CYCLE I=2,1,32 WIRELENS(I)=0 %REPEAT BF=1 BL=0 TL=5000 TF=5001 %CYCLE READ SYMBOL(I) %UNTIL 'A'<=I<='Z' %IF I='Z' %THEN %EXIT READ SYMBOL(I) %UNTIL I='/' READ(N) READ ITEM(PLF) %UNTIL "A"<=PLF<="Z" READ ITEM(T) %AND PLF=PLF.T %UNTIL NEXT ITEM=" " READ(XF) READ(YF) BT='B' %CYCLE I=1,1,N-1 READ ITEM(PLT) %UNTIL "A"<=PLT<="Z" READ ITEM(T) %AND PLT=PLT.T %UNTIL NEXT ITEM=" " READ(XT) READ(YT) %IF BT='B' %THEN BL=BL+1 %AND J=BL %AND BT='T' %C %ELSE TF=TF-1 %AND J=TF %AND BT='B' %IF BL=TF %THEN PRINT STRING(" **** TOO MANY WIRES ! **** ") %IF XFYT) %THEN %START WIRE(J)_PLF=PLF WIRE(J)_PLT=PLT WIRE(J)_XF=XF WIRE(J)_YF=YF WIRE(J)_XT=XT WIRE(J)_YT=YT %FINISH %ELSE %START WIRE(J)_PLF=PLT WIRE(J)_PLT=PLF WIRE(J)_XF=XT WIRE(J)_YF=YT WIRE(J)_XT=XF WIRE(J)_YT=YF %FINISH D=DISTANCE(XF,YF,XT,YT)+0.3 K=INT(2*D+0.5) %IF K<2 %THEN K=2 %IF K>32 %THEN PRINT STRING(" **** LONG WIRE ? **** ") WIRE(J)_L=K WIRELENS(K)=WIRELENS(K)+1 PLF=PLT XF=XT YF=YT %REPEAT %REPEAT QS(BF,BL) QS(TF,TL) DEFINE("STREAM02,".OUT) I=1 SELECT OUTPUT(2) PRINT STRING(" BOTTOM WRAPS ") PRINT WRAPS(TAPE."B",BF,BL) SELECT OUTPUT(2) PRINT STRING(" TOP WRAPS ") PRINT WRAPS(TAPE."T",TF,TL) SELECT OUTPUT(2) PRINT STRING(" WIRE LENGTHS REQUIRED ") %CYCLE I=2,1,32 %IF WIRELENS(I)#0 %THEN %START PRINT(I/2,1,1) PRINT STRING(" INCHES :") WRITE(WIRELENS(I),4) NEWLINE %FINISH %REPEAT PRINT STRING(" TOTAL NUMBER OF WIRES :") WRITE(BL-BF+TL-TF+2,1) NEWLINE %STOP !----------------------------------------------------------------------- %ROUTINE PRINT WRAPS(%STRING(31) FILE,%INTEGER FIRST,LAST) %REAL XPSN,YPSN,XOLD,YOLD %INTEGER J,K DEFINE("STREAM03,".FILE) SELECT OUTPUT(3) PRINT CH(EOB) PRINT STRING("S") PRINT CH(EOB) PRINT STRING("M69") ;! X Y ZERO CHECK PRINT CH(EOB) PRINT STRING("T") PRINT CH(EOB) XPSN=0 YPSN=0 K=0 %CYCLE J=FIRST,1,LAST %IF K#WIRE(J)_L %THEN %START K=WIRE(J)_L SELECT OUTPUT(3) PRINT STRING("M59") ;! WIRE CHANGE SONALERT PRINT CH(EOB) PRINT STRING("T") PRINT CH(EOB) SELECT OUTPUT(2) NEWLINE PRINT(K/2,1,1) PRINT STRING(" INCH LENGTHS, WIRE BIN ".WIREBIN(K)." ") %FINISH SELECT OUTPUT(3) PRINT STRING("N".STRINT4(I)."M".WIREBIN(K)) XOLD=XPSN XPSN=WIRE(J)_XF YOLD=YPSN YPSN=WIRE(J)_YF %IF XPSN>=XOLD %THEN PRINT STRING("X+".STEP(XPSN-XOLD)) %C %ELSE PRINT STRING("X-".STEP(XOLD-XPSN)) %IF YPSN>=YOLD %THEN PRINT STRING("Y+".STEP(YPSN-YOLD)) %C %ELSE PRINT STRING("Y-".STEP(YOLD-YPSN)) PRINT CH(EOB) PRINT STRING("T") PRINT CH(EOB) PRINT STRING("M68") XOLD=XPSN XPSN=WIRE(J)_XT YOLD=YPSN YPSN=WIRE(J)_YT %IF XPSN>=XOLD %THEN PRINT STRING("X+".STEP(XPSN-XOLD)) %C %ELSE PRINT STRING("X-".STEP(XOLD-XPSN)) %IF YPSN>=YOLD %THEN PRINT STRING("Y+".STEP(YPSN-YOLD)) %C %ELSE PRINT STRING("Y-".STEP(YOLD-YPSN)) PRINT CH(EOB) PRINT STRING("T") PRINT CH(EOB) %IF I=I//25*25 %THEN %START ;! INTERMEDIATE ZERO CHECK PRINT STRING("M69") %IF XPSN<=0 %THEN PRINT STRING("X+".STEP(-XPSN)) %C %ELSE PRINT STRING("X-".STEP(XPSN)) %IF YPSN<=0 %THEN PRINT STRING("Y+".STEP(-YPSN)) %C %ELSE PRINT STRING("Y-".STEP(YPSN)) XPSN=0 YPSN=0 PRINT CH(EOB) PRINT STRING("T") PRINT CH(EOB) %FINISH SELECT OUTPUT(2) WRITE(I,4) I=I+1 PRINT STRING(" ".WIRE(J)_PLF." -> ".WIRE(J)_PLT." ") %REPEAT SELECT OUTPUT(3) PRINT STRING("R") PRINT CH(EOB) SELECT OUTPUT(2) CLOSE STREAM(3) %END !----------------------------------------------------------------------- %STRING(4)%FN STRINT4(%INTEGER N) %STRING(4) S %INTEGER I,NN %IF N<0 %OR N>9999 %THEN PRINT STRING(" **** STRINT4 NUMBER ? **** ") S="" %CYCLE I=1,1,4 NN=N N=N//10 S=TOSTRING(NN-10*N+'0').S %REPEAT %RESULT=S %END !----------------------------------------------------------------------- %STRING(4)%FN STEP(%REAL INC) %RESULT=STRINT4(INT(200*INC)) %END !----------------------------------------------------------------------- %ROUTINE QS(%INTEGER FROM,TO) %RECORD WIRET(WIREF) %INTEGER L,U L=FROM U=TO WIRET=WIRE(U) ->IN %CYCLE %UNTIL WIRE(L)_LOUT IN: %REPEAT WIRE(U)=WIRE(L) %UNTIL WIRE(U)_L>WIRET_L %CYCLE U=U-1 %IF L=U %THEN ->OUT %REPEAT WIRE(L)=WIRE(U) %REPEAT OUT:WIRE(U)=WIRET QS(FROM,U-1) %IF FROMU+1 %END %END !----------------------------------------------------------------------- %EXTERNALROUTINE WWCHECK(%STRING(63) S) %EXTERNALROUTINESPEC DEFINE(%STRING(63) S) %STRING(4)%FNSPEC STRINT4(%INTEGER N) %STRING(4)%FNSPEC STEP(%REAL INC) %STRING(31) IN,OUT %REAL XPSN,YPSN,XOLD,YOLD %CONSTINTEGER EOB=13 %INTEGER NET,N,I,J,K,L S->IN.(",").OUT DEFINE("STREAM01,".IN) SELECT INPUT(1) DEFINE("STREAM02,".OUT) SELECT OUTPUT(2) PRINT CH(EOB) PRINT STRING("S") PRINT CH(EOB) PRINT STRING("M69") PRINT CH(EOB) PRINT STRING("T") PRINT CH(EOB) XPSN=0 YPSN=0 NET=0 %CYCLE READ SYMBOL(I) %UNTIL 'A'<=I<='Z' %IF I='Z' %THEN %EXIT %IF NET=25 %THEN %START ;! XY ZERO CHECK PRINT STRING("M69") %IF XPSN<=0 %THEN PRINT STRING("X+".STEP(-XPSN)) %C %ELSE PRINT STRING("X-".STEP(XPSN)) %IF YPSN<=0 %THEN PRINT STRING("Y+".STEP(-YPSN)) %C %ELSE PRINT STRING("Y-".STEP(YPSN)) XPSN=0 YPSN=0 PRINT CH(EOB) PRINT STRING("T") PRINT CH(EOB) NET=0 %FINISH %ELSE NET=NET+1 PRINT STRING("M59") PRINT CH(EOB) PRINT STRING("M97") READ SYMBOL(I) %UNTIL I='/' READ(N) READ SYMBOL(I) %UNTIL I=' ' XOLD=XPSN READ(XPSN) YOLD=YPSN READ(YPSN) %IF XPSN>=XOLD %THEN PRINT STRING("X+".STEP(XPSN-XOLD)) %C %ELSE PRINT STRING("X-".STEP(XOLD-XPSN)) %IF YPSN>=YOLD %THEN PRINT STRING("Y+".STEP(YPSN-YOLD)) %C %ELSE PRINT STRING("Y-".STEP(YOLD-YPSN)) PRINT CH(EOB) PRINT STRING("T") PRINT CH(EOB) %CYCLE I=1,1,N-1 PRINT STRING("M68") READ SYMBOL(J) %UNTIL J=' ' XOLD=XPSN READ(XPSN) YOLD=YPSN READ(YPSN) %IF XPSN>=XOLD %THEN PRINT STRING("X+".STEP(XPSN-XOLD)) %C %ELSE PRINT STRING("X-".STEP(XOLD-XPSN)) %IF YPSN>=YOLD %THEN PRINT STRING("Y+".STEP(YPSN-YOLD)) %C %ELSE PRINT STRING("Y-".STEP(YOLD-YPSN)) PRINT CH(EOB) PRINT STRING("T") PRINT CH(EOB) %REPEAT %REPEAT PRINT STRING("R") PRINT CH(EOB) %STOP !----------------------------------------------------------------------- %STRING(4)%FN STRINT4(%INTEGER N) %STRING(4) S %INTEGER I,NN %IF N<0 %OR N>9999 %THEN PRINT STRING("**** STRINT4 NUMBER ? **** ") S="" %CYCLE I=1,1,4 NN=N N=N//10 S=TOSTRING(NN-10*N+'0').S %REPEAT %RESULT=S %END !----------------------------------------------------------------------- %STRING(4)%FN STEP(%REAL INC) %RESULT=STRINT4(INT(200*INC)) %END %END !----------------------------------------------------------------------- %ENDOFFILE