};
int cmdcodesize = ARRAYSIZE(cmdcodearray);
-CMDCODETAB *cmdtype_code[ARRAYSIZE(cmdcodearray)], *code_type[ARRAYSIZE(cmdcodearray)];
+int cmdtabsize;
+CMDCODETAB **cmdtype_code, **code_type;
/* 命令と命令タイプからハッシュ値を生成する */
unsigned hash_cmdtype(const char *cmd, CMDTYPE type) {
keys[1]->type = INT;
keys[1]->val.i = (int)(type & 070);
/* ハッシュ値を返す */
- return hash(2, keys, cmdcodesize);
+ return hash(2, keys, cmdtabsize);
}
/* 命令と命令タイプがキーのハッシュ表を作成する */
unsigned hashval;
int i;
+ cmdtabsize = cmdcodesize;
+ cmdtype_code = malloc(cmdtabsize * sizeof(CMDCODETAB *));
for(i = 0; i < cmdcodesize; i++) {
- np = (CMDCODETAB *) malloc(sizeof(*np));
- if(np == NULL) {
+ if((np = malloc(sizeof(CMDCODETAB))) == NULL) {
setcerr(122, NULL); /* cannot create hash table */
return false;
}
/* ハッシュ値の生成 */
- hashval = hash_cmdtype((&cmdcodearray[i])->cmd, (&cmdcodearray[i])->type);
+ hashval = hash_cmdtype(cmdcodearray[i].cmd, cmdcodearray[i].type);
/* ハッシュ表に値を追加 */
np->next = cmdtype_code[hashval];
cmdtype_code[hashval] = np;
{
int i;
CMDCODETAB *np, *nq;
- for(i = 0; i < cmdcodesize; i++){
+ for(i = 0; i < cmdtabsize; i++){
np = cmdtype_code[i];
while(np != NULL) {
nq = np->next;
keys[0]->type = INT;
keys[0]->val.i = (int)(code >> 8);
/* ハッシュ値を返す */
- return hash(1, keys, cmdcodesize);
+ return hash(1, keys, cmdtabsize);
}
/* 命令コードがキーのハッシュ表を作成する */
unsigned hashval;
int i;
+ cmdtabsize = hashtabsize(cmdcodesize);
+ code_type = malloc(cmdtabsize * sizeof(CMDCODETAB *));
for(i = 0; i < cmdcodesize; i++) {
- if((np = (CMDCODETAB *) malloc(sizeof(*np))) == NULL) {
+ if((np = malloc(sizeof(CMDCODETAB))) == NULL) {
setcerr(122, NULL); /* cannot create hash table */
return false;
}
{
int i;
CMDCODETAB *np, *nq;
- for(i = 0; i < cmdcodesize; i++){
+ for(i = 0; i < cmdtabsize; i++){
np = code_type[i];
while(np != NULL) {
nq = np->next;