HP C/iX Library Reference Manual (30026-90004)

208 Chapter5
HP C/iX Library Function Descriptions
hcreate
int age, room; /* other than the key. */
};
#define NUM_EMPL 5000 /* number of elements in search table */
#define END_FLAG -1 /* sentinel value for age to terminate
table input */
main( )
{
/* space to store strings */
char string_space[NUM_EMPL*20];
/* space to store employee information */
struct info info_space[NUM_EMPL];
/* next available space in string_space */
char *str_ptr = string_space;
/* next available space in info_space */
struct info *info_ptr = info_space;
ENTRY item, *found_item, *hsearch( );
/* name to look for in table */
char name_to_find[30];
inti=1;
/* create table */
(void) printf("Enter name, age, and room for table. ");
(void) printf("To terminate input, enter -1 for age.\n");
(void) hcreate(NUM_EMPL);
do {
if (scanf("%s%d%d", str_ptr,info_ptr->age,
info_ptr->room) == EOF) exit(0);
if (info_ptr->age == END_FLAG) break;
/* put information into structure */
item.key = str_ptr;
item.data = (char *)info_ptr;
str_ptr += strlen(str_ptr) + 1;
info_ptr++;
/* put item into table */
(void) hsearch(item, ENTER);
} while (i++ NUM_EMPL);
/* access table */
item.key = name_to_find;
while (scanf("%s", item.key) != EOF) {
if ((found_item = hsearch(item, FIND)) != NULL) {
/* if item is in the table */
found_item->key,
((struct info *)found_item->data)->age,
((struct info *)found_item->data)->room);
} else {
(void) printf("No such employee %\n", name_to_find);