ERASE ALL, C-FOCAL v5D(315)-1 2019 18-Sep-75 01.01 C PROGRAM TO RE-SEQUENCE A FOCAL PROGRAM. 01.02 10.01 01.03 11.01 01.04 12.01 01.05 13.01 01.06 14.01 01.07 15.01 01.08 16.01 01.09 17.01 01.10 X FOCAL(1,1),FOCAL(2,2) 01.20 A!"NAME OF FOCAL PROGRAM TO RESEQUENCE:"I$ 01.25 O O RS.TMP;T I$;O O TTY:;O I RS.TMP 01.30 S I$="",CNT=6,FLAG=0 01.40 S C=FCHR(-1);I(C-46)1.7,1.6;I(C-48)*(C-57)*(C-65)*(C-90)*(C-97)*(122-C)1.2 01.50 I CNT 1.4;S CNT=CNT-1,I$=I$+FCHR$(C);G 1.4 01.60 I FLAG 1.2;S CNT=4,FLAG=-1;G 1.5;C HERE IF EXTENSION SPECIFIED 01.70 I FLAG 1.8;S I$=I$+".FCL";C HERE IF NO EXTENSION SPECIFIED 01.80 O I TTY: 01.90 COLLECT ALL OLD LINE NUMBERS IN ARRAY A(N), N=1,FLN 01.95 O O RS.TMP;T"L S RS.TMP;E,A;L C "I$";E;S X=(2^36+FOCAL(97))/2^18,X=(X-FITR(X))*2^18,FLN=0"!"99.98 S X=X+1;I FOCAL(X)99.99,99.98;S FLN=FLN+1,T=FITR(FOCAL(X)/2^18)/2^7,A(FLN)=100*FITR(T)+128*(T-FITR(T));G 99.98"!"99.99 R"!"D 99.98;E A;L S RS1.TMP;L C RS.TMP;L C RS1.TMP;L D RS1.TMP"!;O O TTY: 01.99 L C RS.TMP 02.10 A"SELECT THE PORTION TO BE RE-SEQUENCED:"!"1. THE WHOLE PROGRAM."!"2. ONE GROUP."!"3. A RANGE OF LINES."!":"J 02.11 I J-1 2.1,2.12;I J-2 2.1,2.5;I J-3 2.1,2.6,2.1 02.12 S L=A(1)/100,LO=1.01,U=A(FLN)/100;T!"THERE ARE"%4,FLN-2" LINES IN THE PROGRAM"! 02.20 A"DO YOU WANT TO PRESERVE THE PROGRAM IN A GROUP STRUCTURE? (YES OR NO)"J;I J-0NO 2.2,2.3;I J-0YES 2.2,2.4,2.2 02.30 T"WARNING: REFERENCES TO GROUPS WILL NOT BE CHANGED."! 02.31 A"WHAT STEP INTERVAL BETWEEN LINE NUMBERS? "S 02.32 S S=FITR(S*100+.5)/100;I S-.01 4.21;I 99*.99-FLN*S 4.21,4.21 02.33 G 2.8 02.40 D 2.31;S S=FITR(S*100+.5)/100,X=101;I S-.01 4.21;F J=1,FLN;D 2.45 02.41 I S,4.21,4.4 02.45 I FITR(A(J)/100)-FITR(X/100),2.46;S X=FITR(A(J)/100)*100+1;G 2.45 02.46 S B(A(J))=X/100,X=X+100*S;I FITR(A(J)/100)-FITR(X/100)2.47 02.47 S X=X-100*S+.01;I FITR(A(J)/100)-FITR(X/100+.5)2.48 02.48 S S=0,J=FLN+1;CAUSE PREMATURE EXIT AND ERROR MESSAGE. 02.50 T"WHAT GROUP NUMBER? :";A L;S U=FITR(L+.5)+.99 02.51 A"ENTER NEW GROUP NUMBER AND STEP SIZE: "LO,S 02.52 I-(LO-FITR(LO))^2 2.51;I LO-1 2.51;I 99-LO 2.51;I S-.01 2.51;I .98-S 2.51;I(L-LO)^2,2.53;S B(L*100)=LO;F J=1,FLN;I(A(J)-LO*100)^2 ,2.59 02.53 I LO 2.1;S LO=LO+.01 02.54 F J=1,FLN;I(FITR(A(J)/100)-L)^2,2.58 02.55 I S,4.21,4.4 02.57 S J=FLN,S=0 02.58 S B(A(J))=LO,LO=LO+S;I FITR(LO-S)-FITR(LO)2.57 02.59 S J=FLN,LO=-1;T!"THERE ARE ALREADY LINES IN THAT GROUP. SUGGEST OPTION 3."! 02.60 A"ENTER THE NUMBERS OF THE FIRST AND LAST LINES OF THE RANGE: ",L,U;G 2.7 02.70 A"RANGE THESE ARE TO BECOME"!"[LOWEST,INTERVAL]"!LO,S 02.80 I 100-LO 2.7;I S-.01 2.7;I 1-LO 2.9;S LO=1.01 02.90 C 04.01 CHECK THAT RESEQUENCING IS POSSIBLE; MAKE RESEQUENCING MATRIX. 04.10 S K=0;F J=1,FLN;I(A(J)-L*100)*(U*100-A(J))4.3;S B(A(J))=LO+S*K,K=K+1;I FITR(B(A(J)))-B(A(J))4.3;S B(A(J))=B(A(J))+.01;I .015-S 4.3;S K=K+1 04.11 S E$="" 04.13 F J=1,FLN;I(A(J)-L*100)*(A(J)-U*100)4.3,4.3;I(A(J)-LO*100)*(LO*100+(K-1)*100*S-A(J))4.3;S E$=FCHR$(13)+FCHR$(10)+"%OVERLAP WILL OCCUR";I FITR((A(J)-LO*100)/S)-(A(J)-LO*100)/S 4.3;S E$="";T!"%OVERWRITING WILL OCCUR AT LINE"%4.02,A(J)/100" ..."!;S J=FLN 04.14 T E$! 04.20 I LO+K*S-100 4.4 04.21 T!"RE-SEQUENCING IS NOT POSSIBLE WITH THAT INCREMENT"!;G 2.1 04.30 R 04.40 C 05.01 C DO THE RESEQUENCING 05.02 O O RS.TMP;T"O I "I$"/4;O O RS.TMP/5";O O TTY:;L C RS.TMP;L D RS.TMP 05.10 S C0=0,C=0;D 10;C IS THE CURRENT CHARACTER JUST READ FROM THE INPUT FILE; C0 HAS BEEN PROCESSED BUT NOT YET WRITTEN TO THE OUTPUT FILE. 05.90 O I TTY:/4;O O TTY:/5;CLOSE OUTPUT FILE. 05.92 O O RS1.TMP;T"E,A;L C RS.TMP;L D RS1.TMP;L D RS.TMP;T!";X FCHR(34);T"THE RESEQUENCED FILE IS NOW IN CORE. PLEASE SAVE IT.";X FCHR(34);T"!;Q"!;O O TTY: 05.94 L C RS1.TMP 10.01 C PROGRAM TRANSLATOR 10.02 COME HERE WITH CHARACTER IN C READY TO PROCESS 10.03 CHARACTER IN C0 READY TO WRITE TO THE OUTPUT FILE. 10.04 C - THIS ROUTINE PROCESSES A LINE AT A TIME TILL EOF THEN EXITS. 10.10 I C 10.9;D 11 10.15 C - WE OUGHT TO EXIT GROUP 11 WITH C CONTAINING A LINE FEED. BEST CHECK THIS HOWEVER... 10.20 D 15;I(C0-10)^2,10.1;I-C0 10.2,10.2 10.90 R 11.01 C LINE TRANSLATOR 11.10 S Z=0,CH(-1)=C0,CH(0)=C 11.20 D 12;I C 11.9;I-(C-10)^2 11.2 11.90 R 12.01 C COMMAND TRANSLATOR 12.02 I(C-48)*(57-C)12.03;D 14;R 12.03 I-C 12.04,12.04;R 12.04 I-((C-10)*(C-13)*(C-59))^2 12.05;D 15;R 12.05 I 32-C 12.06;D 15;G 12.02 12.06 S X=C 12.07 D 15;I(C-47)*(C-58)*(C-64)*(C-91)*(C-96)*(C-123)12.07 12.08 I 32-C 12.09;D 15;I-C 12.08,12.08;R 12.09 I(X-96)*(123-X)12.1;S X=X-32 12.10 I (X-65)*(X-70)*(X-79)*(X-81)*(X-82)*(X-83)*(X-84)*(X-88) 12.11,12.40,12.11 ;ASK FOR OPERATE QUIT RETURN SET TYPE XECUTE 12.11 I X-67 12.12,12.55,12.12 ;COMMENT 12.12 I (X-68)*(X-69)*(X-77)*(X-87) 12.13,12.46,12.13 ;DO;ERASE;MODIFY;WRITE 12.13 I X-71 12.16,12.75,12.16 ;GO 12.16 I X-73 12.17,12.45,12.17 ;IF 12.17 I X-76 12.18,12.50,12.18 ;LIBRA 12.18 T/0!"%ILLEGAL COMMAND IN LINE BEGINNING..."! 12.19 F J=0,Z;X FCHR(CH(J)) 12.20 T!/5;G 12.55 12.40 D 13;I C 12.9;I ((C-59)*(C-13)*(C-10))^2,12.9;I ((C-34)*(C-40))^2*(C-48)*(C-57)*(C-65)*(C-90)*(C-97)*(C-122)12.42,12.42;D 15;G 12.4 12.42 D 13;G 12.4 12.45 D 13 12.46 D 14;I-(C-44)^2 12.4;D 15;G 12.46 12.50 I(C-83)*(C-115)12.4,12.51,12.4;C - CONVERT ONLY LIBRA SAVE. 12.51 D 15;I(C-47)*(C-58)*(C-64)*(C-91)*(C-96)*(C-123)12.51 12.52 D 13;I-(C-58)^2 12.46;D 15;G 12.52 12.55 I C 12.99;I(C-10)^2,12.99;D 15;G 12.55 12.75 I FABS((C-84)*(C-116)),12.76;D 14;G 12.55 12.76 D 13,14;G 12.55 12.80 D 15;G 12.02 12.90 I-(C-59)^2 12.99;D 15 12.99 R 13.01 C EXPRESSION SKIPPER 13.02 I C-34 13.1,13.03,13.1 13.03 D 18;G 13.02 13.10 I C-40 13.2,13.11,13.2 13.11 D 17;G 13.5 13.20 I((C-46)*(C-36))^2*(C-48)*(C-57)*(C-65)*(C-90)*(C-97)*(C-122)13.21,13.21,13.4 13.21 D 15;G 13.2;COME TO THIS LINE TO FIND THE END OF ALPHANUMERIC/ALPHANUM$. 13.40 I C-40 13.5,13.11,13.5 13.50 I (C-45)*(C-43)*(C-42)*(C-47)13.9,13.51,13.9 13.51 D 15;G 13.02 13.90 R 14.01 C NUMBER TRANSLATOR 14.10 I C-58 14.2;D 13;R 14.20 I (C-59)*(C-10)*(C-13) 14.3,14.9 14.30 I 32-C 14.4;D 15;G 14.1 14.40 I 47-C 14.5;D 13;R 14.50 S J=0,NP=10,NPI=1,ZZ=Z-1 14.60 S NPI=NPI*10/NP,J=J*NP+(C-48)/NPI;D 16;I(C-46)^2,14.7;I(C-47)*(58-C)14.8,14.8,14.6 14.70 I NP-5 14.8;S NP=1,NPI=.1,C=48;G 14.6 14.80 S J=FITR(J*100+.5);I B(J),14.89;I((CH(ZZ)-32)*(CH(ZZ)-9))^2,14.81;X FCHR(CH(ZZ)) 14.81 S C0=0;T%4.02,B(J);R 14.89 S C0=0;F J=ZZ,Z-1;X FCHR(CH(J)) 14.90 R 15.01 CHARACTER PUTTER AND GETTER 15.10 X FCHR(C0);S C0=C,C=FCHR(-1),Z=Z+1,CH(Z)=C 16.01 CHARACTER GETTER WITH NO PUTTER. 16.20 S C0=C,C=FCHR(-1),Z=Z+1,CH(Z)=C 17.01 C - IF YOUR CURRENT CHARACTER IS LEFT PARENS (40), DO 17. 17.02 C - THIS GROUP WILL SKIP ALL THE CONTENTS INCLUDING THE ). 17.03 C - ON EXIT, C WILL CONTAIN THE CHARACTER TO RIGHT OF THE ). 17.10 S NP=0 17.20 D 15 17.25 I C 17.99;I C-13 17.2,17.99;I C-34 17.2,17.4;I C-40 17.2,17.5;I 41-C 17.2;S NP=NP-1;I-NP 17.2;D 15;G 17.99 17.40 D 18;G 17.25;COME TO THIS LINE IF " ENCOUNTERED. 17.50 S NP=NP+1;G 17.2;COME TO THIS LINE IF NESTED (). 17.99 R 18.01 C - IF YOUR CURRENT CHARACTER IS DOUBLE QUOTE (34), DO 18. 18.02 C - THIS GROUP WILL SKIP ALL THE CONTENTS INCL THE CLOSING ". 18.03 C - ON EXIT, C WILL CONTAIN THE CHAR TO RIGHT OF CLOSING ". 18.04 D 15;I 34-C 18.04,18.05;I 10-C 18.04,18.9,18.04 18.05 D 15 18.90 R TYPE!!"BEWARE! THIS PROGRAM IS PRETTY SLOW."!"IT RESEQUENCES ABOUT 50 LINES PER MINUTE OF CPU TIME."!