SUBROUTINE OPENF(CALLNO,DONE,SVER) 02750 INTEGER CALLNO,SVER 03800 LOGICAL DONE 03850 DIMENSION SVER(1) 03900 IF(.NOT.(CALLNO.EQ.1)) GO TO 32758 04000 DONE=.FALSE. 04001 GO TO 32759 04002 32758 DONE=.TRUE. 04050 32759 RETURN 04100 END 04150 SUBROUTINE GET(LINENO,STRING,ENDFIL) 04200 INTEGER CH,POS,STRING,WD,CHZERO, CHSPAC, CHC, NCHPWD 06000 INTEGER LINENO,LIM,LPOS,I,LINE,LAST 06005 INTEGER IN 06010 LOGICAL ENDFIL 06050 COMMON /PARAM/ NCHPWD, CHZERO, CHSPAC, CHC 06200 DIMENSION STRING( 37 ) 07000 DATA IN/1/ 08051 DATA LIM / 37 /, LPOS / 3 / 08052 10 FORMAT( 35 A 2 , A 2 , 3X,I5) 08300 READ(IN,10,END=20) (STRING(I),I=2,LIM),LINE 08750 IF(.NOT.(LINE.GT.0)) GO TO 32758 08800 LINENO=LINE 08801 GO TO 32759 08802 32758 LINENO=LINENO+1 08850 32759 ASSIGN 32756 TO I32757 08900 GO TO 32757 08901 32756 RETURN 08950 20 ENDFIL=.TRUE. 09000 LINENO=0 09050 RETURN 09100 32757 CONTINUE 09150 LAST=73 09200 WD=LIM 09250 POS=LPOS 09300 GO TO 32754 09350 32755 IF(LAST.LE.1.OR.CH.NE.CHSPAC) GO TO 32753 09351 32754 LAST=LAST-1 09400 POS=POS-1 09450 IF(.NOT.(POS.LE.0)) GO TO 32752 09500 WD=WD-1 09550 POS=NCHPWD 09600 32752 CALL GETCH(STRING(WD), POS, CH) 09700 GO TO 32755 09750 32753 IF(.NOT.(LAST.EQ.1.AND.CH.EQ.CHSPAC)) GO TO 32750 09800 STRING(1)=0 09801 GO TO 32751 09802 32750 STRING(1)=LAST 09850 32751 GO TO I32757 09900 END 09950 SUBROUTINE PUT(LINENO,STRING,IOCLAS) 10000 INTEGER ALN,BLANKS,ERR,FORT,REM 11900 INTEGER LINENO,IOCLAS,LIST,LIMLN,LIMST,I,LASTWD,LPOS,LNHOLD 11910 INTEGER STMT,STRING,CHZERO, CHSPAC, CHC, NCHPWD 11950 INTEGER FOUT, LOUT 11960 COMMON /PARAM/ NCHPWD,CHZERO, CHSPAC, CHC 12100 DIMENSION STRING(2) 12750 DIMENSION BLANKS( 37 ) 13250 DIMENSION LNHOLD( 4 ) 14350 DIMENSION STMT( 37 ) 15000 DATA FORT /1/, LIST/2/, ERR/3/ 16001 DATA FOUT /2/, LOUT /3/ 16002 DATA BLANKS /72, 36 * 2 H / 16003 DATA LNHOLD(1) /5/ 16004 DATA LIMLN / 4 /, LIMST / 37 / 16005 10 FORMAT( 35 A 2 ,A 2 ,3X, 2 A 2 ,A 1 ) 16400 20 FORMAT(1X, 2 A 2 ,A 1 ,1X,65A 2 ) 17000 30 FORMAT(6H+-----) 17500 IF(.NOT.(LINENO.GT.0)) GO TO 32758 17650 CALL PUTNUM(LNHOLD,LINENO) 17651 GO TO 32759 17700 32758 IF(.NOT.(LINENO.EQ.0)) GO TO 32757 17701 CALL CPYSUB(LNHOLD,BLANKS,1,5) 17702 GO TO 32759 17750 32757 CALL PUTNUM(LNHOLD,-LINENO) 17751 32759 IF(.NOT.(IOCLAS.EQ.FORT)) GO TO 32755 17900 CALL CPYSTR(STMT,STRING) 17950 REM=72-STMT(1) 18000 IF(REM.GT.0) CALL CATSUB(STMT,BLANKS,1,REM) 18050 WRITE(FOUT,10) (STMT(I),I=2,LIMST),(LNHOLD(I),I=2,LIMLN) 18100 GO TO 32756 18200 32755 IF(.NOT.(STRING(1).LE.0)) GO TO 32754 18201 WRITE(LOUT,20) (LNHOLD(I),I=2,LIMLN) 18202 GO TO 32756 18250 32754 LASTWD=(STRING(1)-1)/NCHPWD+2 18300 LPOS=STRING(1)-(LASTWD-2)*NCHPWD 18350 IF(.NOT.(LPOS.LT.NCHPWD)) GO TO 32753 18400 LPOS=LPOS+1 18450 DO 32752 I=LPOS,NCHPWD 18500 CALL PUTCH(STRING(LASTWD),I,CHSPAC) 18501 32752 CONTINUE 18502 32753 WRITE(LOUT,20) (LNHOLD(I),I=2,LIMLN),(STRING(I),I=2,LASTWD) 18600 32756 IF(LINENO.LT.0) WRITE(LOUT,30) 18750 RETURN 18800 END 18850 SUBROUTINE CLOSEF(MINCNT,MAJCNT) 18950 INTEGER MINCNT,MAJCNT 18960 RETURN 19750 END 19800 SUBROUTINE CATNUM(A,N) 19850 INTEGER A,HOLD,N 20600 DIMENSION A(1) 20750 DIMENSION HOLD ( 4 ) 21250 DATA HOLD(1) /5/ 21650 CALL PUTNUM(HOLD,N) 21750 CALL CATSTR(A,HOLD) 21800 RETURN 21850 END 21900 SUBROUTINE CATSTR(A,B) 21950 INTEGER A,B 22550 DIMENSION A(1), B(1) 22700 CALL CATSUB(A,B,1,B(1)) 22800 RETURN 22850 END 22900 SUBROUTINE CATSUB(A,B,START,LEN) 22950 INTEGER A,APOS,AWD,B,CHC,CHSPAC,BPOS,BWD 23650 INTEGER START,CHZERO,CH,NCHPWD,I,LEN 23700 DIMENSION A(1),B(1) 23850 COMMON /PARAM/ NCHPWD, CHZERO,CHSPAC,CHC 24000 AWD=A(1)/NCHPWD+2 24150 APOS=A(1)+1-(AWD-2)*NCHPWD 24200 BWD=(START-1)/NCHPWD+2 24250 BPOS=START-(BWD-2)*NCHPWD 24300 I=1 24450 32759 IF(.NOT.(I.LE.LEN)) GO TO 32758 24500 CALL GETCH(B(BWD),BPOS,CH) 24550 CALL PUTCH (A(AWD),APOS,CH) 24600 I=I+1 24650 APOS=APOS+1 24700 IF(.NOT.(APOS.GT.NCHPWD)) GO TO 32757 24750 AWD=AWD+1 24800 APOS=1 24850 32757 BPOS=BPOS+1 24950 IF(.NOT.(BPOS.GT.NCHPWD)) GO TO 32756 25000 BWD=BWD+1 25050 BPOS=1 25100 32756 GO TO 32759 25200 32758 A(1)=A(1)+LEN 25250 RETURN 25300 END 25350 INTEGER FUNCTION CHTYP(CH) 25400 INTEGER CH 25900 IF(.NOT.(CH.GE.65.AND.CH.LE.90)) GO TO 32758 26550 CHTYP=1 26551 GO TO 32759 26600 32758 IF(.NOT.(CH.GE.97.AND.CH.LE.122)) GO TO 32757 26601 CHTYP=1 26602 GO TO 32759 26650 32757 IF(.NOT.(CH.GE.48.AND.CH.LE.57)) GO TO 32756 26651 CHTYP=2 26652 GO TO 32759 26700 32756 IF(.NOT.(CH.EQ.45)) GO TO 32755 26701 CHTYP=3 26702 GO TO 32759 26750 32755 IF(.NOT.(CH.EQ.40)) GO TO 32754 26751 CHTYP=4 26752 GO TO 32759 26800 32754 IF(.NOT.(CH.EQ.41)) GO TO 32753 26801 CHTYP=5 26802 GO TO 32759 26850 32753 IF(.NOT.(CH.EQ.32.OR.CH.EQ.9)) GO TO 32752 26851 CHTYP=6 26852 GO TO 32759 26900 32752 CHTYP=7 26901 32759 RETURN 28300 END 28350 SUBROUTINE CPYSTR(A,B) 28400 INTEGER A,B 29000 DIMENSION A(1),B(1) 29100 A(1)=0 29150 CALL CATSUB(A,B,1,B(1)) 29200 RETURN 29250 END 29300 SUBROUTINE CPYSUB(A,B,START,LEN) 29350 INTEGER A,B,START,LEN 29950 DIMENSION A(1),B(1) 30100 A(1)=0 30200 CALL CATSUB(A,B,START,LEN) 30250 RETURN 30300 END 30350 SUBROUTINE GETCH(WD,POS,CH) 30400 INTEGER WD,POS,CH 30875 IF(.NOT.(POS.EQ.1)) GO TO 32758 30900 CH=WD.AND.127 30901 GO TO 32759 30902 32758 CH=(WD.AND.32512)/256 30925 32759 RETURN 34200 END 34250 INTEGER FUNCTION HASH(A,PRIME) 34300 INTEGER A,PRIME,CHZERO,CHSPAC,CHC,CH,NCHPWD,L,N,I 34950 DIMENSION A(1) 35100 COMMON /PARAM/ NCHPWD,CHZERO,CHSPAC,CHC 35250 L=(A(1)-1)/NCHPWD+2 35400 N=A(1)-(L-2)*NCHPWD 35550 HASH=A(1) 35750 I=2 35800 32759 IF(.NOT.(I.LT.L)) GO TO 32758 35850 HASH=HASH+A(I)-(A(I)/PRIME)*PRIME 35900 I=I+1 35950 GO TO 32759 36000 32758 IF(.NOT.(N.EQ.NCHPWD)) GO TO 32756 36150 HASH=HASH+A(L)-A(L)/PRIME*PRIME 36151 GO TO 32757 36152 32756 DO 32755 I=1,N 36250 CALL GETCH(A(L),I,CH) 36300 HASH=HASH+CH 36350 32755 CONTINUE 36400 32757 IF(HASH.LT.0) HASH=-HASH 36600 HASH=HASH-(HASH/PRIME)*PRIME 36650 RETURN 36700 END 36750 SUBROUTINE PUTCH(WD,POS,CH) 36800 INTEGER WD,POS,CH 37225 IF(.NOT.(POS.EQ.1)) GO TO 32758 37250 WD=(WD.AND.32512).OR.CH 37251 GO TO 32759 37252 32758 WD=(WD.AND.127).OR.(CH*256) 37275 32759 RETURN 41150 END 41200 SUBROUTINE PUTNUM(A,NUM) 41250 INTEGER A,APOS,AWD,CHC,DIGIT,CHSPAC,CHZERO 41750 INTEGER NUM,N,I,N10,NCHPWD 41760 DIMENSION A(1) 41900 DIMENSION DIGIT(5) 42050 COMMON /PARAM/ NCHPWD,CHZERO,CHSPAC,CHC 42200 N=NUM 42500 I=5 42550 GO TO 32758 42600 32759 IF(I.LT.1) GO TO 32757 42601 32758 N10=N/10 42650 DIGIT(I)=N-N10*10+CHZERO 42700 N=N10 42750 I=I-1 42800 GO TO 32759 42850 32757 AWD=2 42900 APOS=1 42950 DO 32756 I=1,5 43000 CALL PUTCH(A(AWD),APOS,DIGIT(I)) 43050 APOS=APOS+1 43100 IF(.NOT.(APOS.GT.NCHPWD)) GO TO 32755 43150 AWD=AWD+1 43200 APOS=1 43250 32755 CONTINUE 43350 32756 CONTINUE 43351 RETURN 43400 END 43450 LOGICAL FUNCTION STREQ(A,B) 43500 INTEGER A,B,CH1,CH2,CHC,CHSPAC,POS,CHZERO,WD 44150 INTEGER I,L,NCHPWD 44200 DIMENSION A(1),B(1) 44350 COMMON /PARAM/NCHPWD,CHZERO,CHSPAC,CHC 44500 IF(.NOT.(A(1).NE.B(1))) GO TO 32758 44650 STREQ=.FALSE. 44651 GO TO 32759 44700 32758 IF(.NOT.(A(1).LE.0)) GO TO 32757 44701 STREQ=.TRUE. 44702 GO TO 32759 44750 32757 I=1 44800 POS=1 44850 WD=2 44900 L=A(1) 44950 GO TO 32755 45000 32756 IF(CH1.NE.CH2.OR.I.GT.L) GO TO 32754 45001 32755 CALL GETCH(A(WD),POS,CH1) 45050 CALL GETCH(B(WD),POS,CH2) 45100 I=I+1 45150 POS=POS+1 45200 IF(.NOT.(POS.GT.NCHPWD)) GO TO 32753 45250 POS=1 45300 WD=WD+1 45350 32753 GO TO 32756 45450 32754 IF(.NOT.(CH1.EQ.CH2)) GO TO 32751 45500 STREQ=.TRUE. 45501 GO TO 32752 45502 32751 STREQ=.FALSE. 45550 32752 CONTINUE 45650 32759 RETURN 45700 END 45750 LOGICAL FUNCTION STRLT(A,B) 45800 INTEGER A,B,CHC,CHSPAC,CHZERO 46450 INTEGER NCHPWD,MIN,LIM,I 46500 DIMENSION A(1),B(1) 46650 COMMON /PARAM/ NCHPWD,CHZERO,CHSPAC,CHC 46800 IF(.NOT.(A(1).LT.B(1))) GO TO 32758 46900 MIN=A(1) 46901 GO TO 32759 46902 32758 MIN=B(1) 46950 32759 LIM=(MIN-1)/NCHPWD+2 47000 I=2 47050 32757 IF(I.GT.LIM.OR.A(I).NE.B(I)) GO TO 32756 47100 I=I+1 47101 GO TO 32757 47102 32756 IF(.NOT.(I.GT.LIM)) GO TO 32754 47200 IF(.NOT.(A(1).LT.B(1))) GO TO 32752 47250 STRLT=.TRUE. 47251 GO TO 32753 47252 32752 STRLT=.FALSE. 47300 32753 GO TO 32755 47400 32754 IF(.NOT.(A(I).GE.0.AND.B(I).LT.0)) GO TO 32751 47401 STRLT=.TRUE. 47402 GO TO 32755 47450 32751 IF(.NOT.(B(I).GE.0.AND.A(I).LT.0)) GO TO 32750 47451 STRLT=.FALSE. 47452 GO TO 32755 47500 32750 IF(.NOT.(A(I).LT.B(I))) GO TO 32749 47501 STRLT=.TRUE. 47502 GO TO 32755 47550 32749 STRLT=.FALSE. 47551 32755 RETURN 47650 END 47700 INTEGER FUNCTION NEWNO(N) 47750 INTEGER N 48260 IF(.NOT.(N.NE.0)) GO TO 32758 48300 NEWNO=N 48301 GO TO 32759 48302 32758 NEWNO=NEWNO-1 48350 32759 RETURN 48400 END 48450 END 48450