SUBROUTINE CATNUM(A,N) INTEGER A,HOLD DIMENSION A(1) DIMENSION HOLD ( 4 ) DATA HOLD(1) /5/ CALL PUTNUM(HOLD,N) CALL CATSTR(A,HOLD) RETURN END SUBROUTINE CATSTR(A,B) INTEGER A,B DIMENSION A(1), B(1) CALL CATSUB(A,B,1,B(1)) RETURN END SUBROUTINE CPYSTR(A,B) INTEGER A,B DIMENSION A(1),B(1) A(1)=0 CALL CATSUB(A,B,1,B(1)) RETURN END SUBROUTINE CPYSUB(A,B,START,LEN) INTEGER A,B,START DIMENSION A(1),B(1) A(1)=0 CALL CATSUB(A,B,START,LEN) RETURN END FUNCTION HASH(A,PRIME) INTEGER A,HASH,PRIME,CHZERO,CHSPAC,CHC,CH DIMENSION A(1) COMMON /PARAM/ NCHPWD,CHZERO,CHSPAC,CHC L=(A(1)-1)/NCHPWD+2 N=A(1)-(L-2)*NCHPWD HASH=A(1) I=2 32759 IF(.NOT.(I.LT.L)) GO TO 32758 HASH=HASH+A(I)-(A(I)/PRIME)*PRIME I=I+1 GO TO 32759 32758 IF(.NOT.(N.EQ.NCHPWD)) GO TO 32756 HASH=HASH+A(L)-A(L)/PRIME*PRIME GO TO 32757 32756 DO 32755 I=1,N CALL GETCH(A(L),I,CH) HASH=HASH+CH 32755 CONTINUE 32757 IF(HASH.LT.0) HASH=-HASH HASH=HASH-(HASH/PRIME)*PRIME RETURN END SUBROUTINE PUTCH(WD,POS,CH) INTEGER WD,POS,CH IF(.NOT.(POS.EQ.1)) GO TO 32758 WD=(WD.AND.32512).OR.CH GO TO 32759 32758 WD=(WD.AND.127).OR.(CH*256) 32759 RETURN END SUBROUTINE PUTNUM(A,NUM) INTEGER A,APOS,AWD,CHC,DIGIT,CHSPAC,CHZERO DIMENSION A(1) DIMENSION DIGIT(5) COMMON /PARAM/ NCHPWD,CHZERO,CHSPAC,CHC N=NUM I=5 GO TO 32758 32759 IF(I.LT.1) GO TO 32757 32758 N10=N/10 DIGIT(I)=N-N10*10+CHZERO N=N10 I=I-1 GO TO 32759 32757 AWD=2 APOS=1 DO 32756 I=1,5 CALL PUTCH(A(AWD),APOS,DIGIT(I)) APOS=APOS+1 IF(.NOT.(APOS.GT.NCHPWD)) GO TO 32755 AWD=AWD+1 APOS=1 32755 CONTINUE 32756 CONTINUE RETURN END FUNCTION NEWNO(N) IF(.NOT.(N.NE.0)) GO TO 32758 NEWNO=N GO TO 32759 32758 NEWNO=NEWNO-1 32759 RETURN END