version 1.11, 2004/07/20 03:50:26 |
version 1.12, 2005/03/06 14:34:25 |
|
|
addkey(char *key, int val) |
addkey(char *key, int val) |
{ |
{ |
struct templ *p; |
struct templ *p; |
int i = 0; |
int i; |
|
|
while (i < nspecials) { |
for (i = 0; i < nspecials; i++) { |
p = &specials[i]; |
p = &specials[i]; |
if (p->rwd[0] == key[0] && strcmp(p->rwd, key) == 0) |
if (p->rwd[0] == key[0] && strcmp(p->rwd, key) == 0) |
return; |
return; |
else |
|
i++; |
|
} |
} |
|
|
if (specials == specialsinit) { |
if (specials == specialsinit) { |
|
|
* Whoa. Must reallocate special table. |
* Whoa. Must reallocate special table. |
*/ |
*/ |
nspecials = sizeof (specialsinit) / sizeof (specialsinit[0]); |
nspecials = sizeof (specialsinit) / sizeof (specialsinit[0]); |
maxspecials = nspecials; |
maxspecials = nspecials + (nspecials >> 2); |
maxspecials += maxspecials >> 2; |
|
specials = (struct templ *)malloc(maxspecials * sizeof specials[0]); |
specials = (struct templ *)malloc(maxspecials * sizeof specials[0]); |
if (specials == NULL) |
if (specials == NULL) |
err(1, NULL); |
err(1, NULL); |
memmove(specials, specialsinit, sizeof specialsinit); |
memcpy(specials, specialsinit, sizeof specialsinit); |
} else if (nspecials >= maxspecials) { |
} else if (nspecials >= maxspecials) { |
int newspecials = maxspecials + maxspecials >> 2; |
int newspecials = maxspecials + (maxspecials >> 2); |
struct templ *specials2; |
struct templ *specials2; |
|
|
specials2 = realloc(specials, newspecials * sizeof specials[0]); |
specials2 = realloc(specials, newspecials * sizeof specials[0]); |
|
|
maxspecials = newspecials; |
maxspecials = newspecials; |
} |
} |
|
|
p = &specials[i]; |
p = &specials[nspecials]; |
p->rwd = key; |
p->rwd = key; |
p->rwcode = val; |
p->rwcode = val; |
nspecials++; |
nspecials++; |