#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %begin
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 2
// 3 %integerfunction hash addr(%string (31) name)
int HASHADDR(_imp_string31 NAME) {
// 4 %constinteger hash table size = 1023
// 5 %integer hash index = 0; %integer char
int HASHINDEX;
HASHINDEX = 0;
int CHAR;
// 6 %for char = 1,1,LENGTH (name) %cycle
// %for CHAR = 1, 1, *_imp_LENGTH((_imp_string255 *)/*p*//*?*/&NAME) %cycle
{
int _final = *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &NAME);
if (invalid_for_loop(1, 1, _final))
_imp_signal(5, 1, 0, "Illegal cycle CHAR = 1, 1, *_imp_LENGTH((_imp_string255 *)/*p*//*?*/&NAME)");
CHAR = 0;
L_0001:
if (CHAR == _final) goto L_0002;
CHAR += 1;
// 7 hash index = hash index<<1 !! CHARNO(name,char)
HASHINDEX = HASHINDEX << 1 ^ *_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &NAME, CHAR);
// 8 %repeat
goto L_0001;
}
L_0002:;
// 9 %result = hash index & hash table size
return HASHINDEX & 1023;
// 10 %end {of hash code generated from string}
} /* end of HASHADDR */
// 11
// 12 %endofprogram
_imp_stop(0);
return 0;
end_0:;
}