/* alw1.c RAP Version 2.1 28/11/07 */ #include #include #include "alw1.h" void alwcons (ALW * a, int maxword) { int good; a->maxword=maxword; good=1; a->nex = (int *) malloc(sizeof(int)*maxword); if(a->nex == NULL) good=0; a->prev = (int *) malloc(sizeof(int)*maxword); if(a->prev == NULL) good=0; a->len = (int *) malloc(sizeof(int)*maxword); if(a->len == NULL) good=0; a->word = (int **) malloc(sizeof(int*)*maxword); if(a->nex == NULL) good=0; if(good==0) { printf("malloc failed in alwcons\n"); exit(21); } } void alwstart (ALW * a) { int i; for(i=3;i<(a->maxword);i++) a->nex[i]=i+1; a->nex[a->maxword-1]=0; a->nex[1]=2; a->prev[2]=1; a->freechain=3; } int alwfind (ALW *a, int * word, int len) { int i,ml,j; int * pt; i=1; while(1) { i=a->nex[i]; if(i==2) break; pt=a->word[i]; ml=a->len[i]; if(ml>len) ml=len; for(j=0;jword[j]) return -(a->prev[i]); if(word[j]>pt[j]) break; } if(jlen[i]) return i; if(lenlen[i]) return -(a->prev[i]); } return -(a->prev[i]); } int alwinsert (ALW *a, int * word, int len, int han) { int i,j; j=a->freechain; if(j==0) { printf("Run out of words in the store adin arrays\n"); exit(22); } a->freechain=a->nex[j]; a->len[j]=len; a->word[j]=word; i=a->nex[han]; /* han (j) i */ a->nex[han]=j; a->prev[j]=han; a->nex[j]=i; a->prev[i]=j; return j; } void alwdelete (ALW *a, int han) { int i,j; i=a->prev[han]; j=a->nex[han]; /* i (han) j */ a->nex[i]=j; a->prev[j]=i; a->nex[han]=a->freechain; a->freechain=han; } /* end of alw1.c */