Listing 1

 1: /*
 2:  * MDB.H        (Generalized Static/Dynamic Array Version)
 3:  *
 4:  * Program:     Mini-Database
 5:  * Written by:  Leor Zolman
 6:  * Module:      Program Header File
 7:  *
 8:
 9: #define TRUE    1
10: #define FALSE   0
11:
12: #define DYN_ARRAY TRUE
13:
14: /*
15:  * Prototypes:
16:  */
17:
18: int do_menu(struct menu_item *mnu, char *title);
19: void write_db(char *filename);
20: int read_db(char *filename);
21: void edit_db();
22: void fix_db();
23: void backup_db();
24: void error(char *msg);
25: struct record *alloc_rec(void);
26: void free_up();
27:
28: /*
29:  * Data Definitions:
30:  */
31:
32: struct record {         /* Database record definition     */
33:     char    active;     /* TRUE if Active, else FALSE     */
34:     cha     last[25], first[15];/* Name             */
35:     long    id;                 /* ID Number        */
36:     int     age;                /* Age              */
37:     char    gender;             /* M or F           */
38:     float   salary;             /* Annual Salary    */
39: };
40:
41: #define MAX_RECS    1000 /* Maximum number of records     */
42:
43:
44: #ifdef MAIN_MODULE      /* Make sure data is only         */
45: #define EXTERN          /* DEFINED in the main module,    */
46: #else                   /* and declared as EXTERNAL in    */
47: #define EXTERN extern   /* the other modules.             */
48: #endif
49:
50:
51: #if DYN_ARRAY           /* Dynamics array allocation:     */
52: #define MAX_TO_ADD 100  /* Limit on # of new records      */
53: EXTERN  struct  record  *(*recs)[]; /*  recs: ptr to ar-  */
54: #define RECS    (*recs) /*  ray of ptrs to struct record  */
55:
56: #else                       /* Static array allocation:   */
57: EXTERN  struct  record *recs[MAX_RECS]; /* Array of ptr   */
58: #define RECS    recs        /*  to struct of type record  */
59: #endif
60:
61: EXTERN  int n_recs;     /* # of records in current db     */
62: EXTERN  int max_recs;   /* Max # of recs allowed          */
63:
64: struct menu_item {          /* Menu definition record     */
65:     int action_code;        /* Menu item code             */
66:     char *descrip;          /* Menu item text             */
67: };
68: