Listing 7
/* --------------------- PHLIST2.H --------------------- */ #include "pinlist.h" typedef struct phone_entry { char last_name[21], first_name[11], phone_no[14]; } PHONE_ENTRY; #define PHONE_LIST_CLASS PINNACLE_LIST_CLASS \ PHONE_ENTRY pe; \ DBCOL last, first, phone, lastfirst; typedef struct phone_list { PHONE_LIST_CLASS } PHONE_LIST; PHONE_LIST *new_phone_list(); void destroy_phone_list(PHONE_LIST *); /* ---------------- PHLIST2.C ------------------------ */ #include "phlist2.h" #include <string.h> #include <conio.h> #include <stdlib.h> static void phone_list_memory_error(char *fun) { fprintf{stderr, "\nMemory Error in Function %s <Press a Key>\n", fun); getch(); exit(1); } static unsigned find(PHONE_LIST *this, char *srch_l_name) { DBSEARCH sobj; unsigned found; sobj = DB_SearchObject(this->db, String, srch_l_name, "=="); found = DB_FindNext(this->last,sobj,DBNEXT); DB_Free(sobj); return(found); } static display(PHONE_LIST *this) { strcpy(this->pe.last_name,DB_GetString(this->last)); strcpy(this->pe.first_name,DB_GetString(this->first)); strcpy(this->pe.phone_no,DB_GetString(this->phone)); printf("%-20s, %-10s - %-13s\n",this->pe.last_name, this->pe.first_name, this->pe.phone_no); } static void add_member(PHONE_LIST *this, PHONE_ENTRY *pe) { DB_AddRow)(this->table); DB_PutString(this->last,pe->last_name); DB_PutString(this->first,pe->first_name); DB_PutString(this->phone,pe->phone_no); } static void replace_member(PHONE_LIST *this, PHONE_ENTRY *pe) { DB_PutString(this->last,pe->last_name); DB_PutString(this->first,pe->first_name); DB_PutString(this->phone,pe->phone_no); } static PHONE_ENTRY *current(PHONE_LIST *this) { strcpy(this->pe.last_name,DB_GetString(this->last)); strcpy(this->pe.first_name,DB_GetString(this->first)); strcpy(this->pe.phone_no,DB_GetString(this->phone)); return(&(this->pe)); } PHONE_LIST *new_phone_list() { PINNACLE_LIST *pl; PHONE_LIST *this; pl = new_pinnacle_list("fonelist.db","PhoneList"); if (pl == NULL) return(NULL); this = calloc(1,sizeof(PHONE_LIST)); if (this == NULL) { destroy_pinnacle_list(pl); return(NULL); } memmove(this,pl,sizeof(PINNACLE_LIST)); free(pl); this->last = DB_Column(this->table,"Last"); this->first = DB_Column(this->table,"First"); this->phone = DB_Column(this->table,"Phone"); this->lastfirst = DB_Column(this->table,"LastFirst"); DB_OrderBy(this->lastfirst); this->find = find; this->display = display; this->add_member = add_member; this->replace_member = replace_member; this->current = current; return(this); } void destroy_phone_list(PHONE_LIST *this) { destroy_pinnacle_list(this); }