%EXTERNALROUTINE HASH(%STRING(63) S) %EXTERNALROUTINESPEC DEFINE(%STRING(63) S) %STRING(4)%ARRAY INSTR(1:171) %BYTEINTEGERARRAY ITYPE(1:171) %BYTEINTEGERARRAY ICODE(1:171) %BYTEINTEGERARRAY ILINK(1:171) %CONSTINTEGER HASHSIZE=63 %BYTEINTEGERARRAY HILINK(0:HASHSIZE) %INTEGER I,J,K,L,TYPE,CODE %STRING(15) T,U %CONSTSTRING(1)%ARRAY H(0:15)="0","1","2","3","4","5","6","7", "8","9","A","B","C","D","E","F" S->T.(",").U DEFINE("STREAM01,".T) SELECT INPUT(1) DEFINE("STREAM02,".U) %CYCLE I=0,1,HASHSIZE HILINK(I)=0 %REPEAT %CYCLE L=1,1,171 READ ITEM(T) %UNTIL "A"<=T<="Z" READ ITEM(U) %AND T=T.U %UNTIL NEXT ITEM<"A" %OR NEXT ITEM>"Z" INSTR(L)=T READ(ICODE(L)) READ(ITYPE(L)) J=0 %CYCLE I=1,1,LENGTH(T) J=J<<1+CHARNO(T,I)-'A' %REPEAT K=J&HASHSIZE ILINK(L)=HILINK(K) HILINK(K)=L %REPEAT DEFINE("STREAM03,CLASH") SELECT OUTPUT(3) %CYCLE I=1,1,171 T=INSTR(I) J=0 %CYCLE K=1,1,LENGTH(T) J=J<<1+CHARNO(T,K)-'A' %REPEAT K=J&HASHSIZE J=0 L=HILINK(K) %WHILE I#L %THEN J=J+1 %AND L=ILINK(L) PRINT STRING(T) WRITE(J,1) SPACES(3) %REPEAT SELECT OUTPUT(2) PRINT STRING("%CONSTBYTEINTEGERARRAY HILINK(0:") WRITE(HASHSIZE,1) PRINT STRING(")= %C") %CYCLE I=0,1,HASHSIZE %IF I//14*14=I %THEN PRINT STRING(" ") WRITE(HILINK(I),1) PRINT STRING(",") %UNLESS I=HASHSIZE %REPEAT PRINT STRING(" %CONSTSTRING(4)%ARRAY INSTR(1:171)= %C ") %CYCLE I=1,1,171 %IF I//10*10=I %THEN PRINT STRING(" ") PRINT STRING("""".INSTR(I)."""") PRINT STRING(",") %UNLESS I=171 %REPEAT PRINT STRING(" %CONSTBYTEINTEGERARRAY ICODE(1:171)= %C ") %CYCLE I=1,1,171 %IF I//10*10=I %THEN PRINT STRING(" ") PRINT STRING("X'".H(ICODE(I)>>4).H(ICODE(I)&15)."'") PRINT STRING(",") %UNLESS I=171 %REPEAT PRINT STRING(" %CONSTBYTEINTEGERARRAY ITYPE(1:171)= %C ") %CYCLE I=1,1,171 %IF I//14*14=I %THEN PRINT STRING(" ") WRITE(ITYPE(I),1) PRINT STRING(",") %UNLESS I=171 %REPEAT PRINT STRING(" %CONSTBYTEINTEGERARRAY ILINK(1:171)= %C ") %CYCLE I=1,1,171 %IF I//14*14=I %THEN PRINT STRING(" ") WRITE(ILINK(I),1) PRINT STRING(",") %UNLESS I=171 %REPEAT NEWLINE %END %ENDOFFILE