#include<stdio.h>
#include<stdlib.h>
typedef struct Nameval Nameval;
struct Nameval
{
char *name;
int value;
};
struct NVtab
{
int nval;
int max;
Nameval *nameval;
}nvtab;
enum{NVINIT=1,NVGROW=2};
int addname(Nameval newname)
{
Nameval *nvp;
if(nvtab.nameval==NULL)
{
nvtab.nameval=(Nameval*)malloc(NVINIT*sizeof(Nameval));
if(nvtab.nameval==NULL)
return -1;
nvtab.max=NVINIT;
nvtab.nval=0;
}
else if(nvtab.nval>=nvtab.max)
{
nvp=(Nameval*)realloc(nvtab.nameval,(NVGROW*nvtab.max)*sizeof(Nameval));
if(nvp==NULL)return -1;
nvtab.max*=NVGROW;
nvtab.nameval=nvp;
}
nvtab.nameval[nvtab.nval]=newname;
return nvtab.nval++;
}
int main(int argc,char *argv[])
{
Nameval htmlchar1=
{
"aelig",0x00c6,
};
Nameval htmlchar2=
{
"aacute",0x00c1,
};
Nameval htmlchar3=
{
"acirc",0x00c2,
};
addname(htmlchar1);
printf("%d,%d,%s\n",nvtab.nval,nvtab.max,nvtab.nameval[nvtab.nval-1].name);
addname(htmlchar2);
printf("%d,%d,%s\n",nvtab.nval,nvtab.max,nvtab.nameval[nvtab.nval-1].name);
addname(htmlchar3);
printf("%d,%d,%s\n",nvtab.nval,nvtab.max,nvtab.nameval[nvtab.nval-1].name);
return 0;
}