home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / CONTRIB / MBASE / MBASE50.TAR / mbase / src / mbase.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-05-21  |  12.4 KB  |  397 lines

  1. /*
  2.  * METALBASE 5.0
  3.  *
  4.  * Released October 1st, 1992 by Huan-Ti [ richid@owlnet.rice.edu ]
  5.  *                                       [ t-richj@microsoft.com ]
  6.  */
  7.  
  8. #ifndef MBASE_H
  9. #define MBASE_H
  10.  
  11. #include <stdinc.h>
  12. #ifdef NCURSES
  13. #include <ncurses.h>
  14. #else
  15. #include <curses.h>
  16. #endif
  17.  
  18. #define verCURRENT 50  /* Signature for 5.0 relations */
  19.  
  20. extern WINDOW *win;
  21.  
  22. #ifdef KEY_RIGHT   /* If this is defined in curses.h, the curses package  */
  23. #define USE_CURKEY /* supports keypad mode, and can trap our keys itself. */
  24. #endif             /* Otherwise, we have to use our own esc-sequences. /  */
  25.  
  26. /*
  27.  * USER-DEFINABLE DEFINITIONS -----------------------------------------------
  28.  *
  29.  */
  30.  
  31. #ifndef MAX_REL
  32. #define MAX_REL  100      /* Max relations open at once for any given user */
  33. #endif
  34. #ifndef MAX_FLD
  35. #define MAX_FLD   40      /* Maximum number of fields in a relation        */
  36. #endif
  37. #ifndef MAX_IDX
  38. #define MAX_IDX   20      /* Maximum number of indices in a relation       */
  39. #endif
  40. #ifndef MAX_CACHE
  41. #define MAX_CACHE 500     /* Maximum # of records to cache before flushing */
  42. #endif
  43.  
  44. /*
  45.  * ERROR CODES --------------------------------------------------------------
  46.  *
  47.  */
  48.  
  49. typedef enum
  50.    {
  51.    MB_OKAY = 0,
  52.    MB_NO_ROOM,    /* MAX_REL is #defined to be too small   */
  53.    MB_NO_MEMORY,  /* Not enough memory for requested task  */
  54.    MB_NO_OPEN,    /* Cannot open given filename            */
  55.    MB_NO_READ,    /* Cannot read given filename            */
  56.    MB_FORMAT,     /* Relation is not in MB 4.0+ format     */
  57.    MB_LOCKED,     /* Relation is locked by another user    */
  58.    MB_BUSY,       /* Relation has too many users at once   */
  59.    MB_BAD_REL,    /* Function passed bad relation struct   */
  60.    MB_NO_WRITE,   /* Cannot write given filename           */
  61.    MB_TIMEOUT,    /* Temporary lock has not been removed   */
  62.    MB_BAD_REC,    /* A null rec pointer has been received  */
  63.    MB_CORRUPT,    /* A corrupt index has been detected     */
  64.    MB_BAD_DUP,    /* Addition would violate a nodups idx   */
  65.    MB_NO_CURR,    /* Current record required for operation */
  66.    MB_BAD_IDX,    /* A bad index number has been received  */
  67.    MB_NO_SUCH,    /* The specified record can't be found   */
  68.    MB_UNKNOWN,    /* Search command invalid                */
  69.    MB_NO_FIELDS,  /* The new relation has no fields        */
  70.    MB_NO_INDICES, /* The new relation has no indices       */
  71.    MB_BAD_INDEX,  /* A proposed new index has no fields    */
  72.    MB_DISKFULL,   /* There is not enough free space left   */
  73.    MB_BAD_SERIAL, /* Serial #'s for records can't change   */
  74.    MB_TMPDIR,     /* You must define a TMP directory       */
  75.    MB_TMPERR,     /* Cannot work with TMP directory        */
  76.    } mb_err;
  77.  
  78. /*
  79.  * SEARCH CRITERIA ----------------------------------------------------------
  80.  *
  81.  */
  82.  
  83. typedef enum
  84.    {
  85.    FRST = 0,
  86.    LAST,
  87.    CURR,
  88.    NEXT,
  89.    PREV,
  90.    GTEQ,
  91.    GTHN,
  92.    LTEQ,
  93.    LTHN,
  94.    EQUL
  95.    } mb_action;
  96.  
  97. typedef enum
  98.    {
  99.    T_CHAR = 0,  /*  0 -- length ? (char [])         */
  100.    T_SHORT,     /*  1 -- length 2 (short)           */
  101.    T_USHORT,    /*  2 -- length 2 (unsigned short)  */
  102.    T_LONG,      /*  3 -- length 4 (long)            */
  103.    T_ULONG,     /*  4 -- length 4 (unsigned long)   */
  104.    T_FLOAT,     /*  5 -- length 4 (float)           */
  105.    T_DOUBLE,    /*  6 -- length 8 (double)          */
  106.    T_MONEY,     /*  7 -- length 8 (double)          */
  107.    T_TIME,      /*  8 -- length 4 (long)            */
  108.    T_DATE,      /*  9 -- length 4 (long)            */
  109.    T_SERIAL,    /* 10 -- length 4 (long)            */
  110.    T_PHONE      /* 11 -- lenght 20 (char [])        */
  111.    } ftype;
  112.  
  113. #define FIRST    FRST
  114. #define CURRENT  CURR
  115. #define PREVIOUS PREV
  116. #define GTHAN    GTHN
  117. #define LTHAN    LTHN
  118. #define EQUAL    EQUL
  119.  
  120. #define AR_UP    (char)129  /* Arrows for input.c */
  121. #define AR_DOWN  (char)130
  122. #define AR_LEFT  (char)131
  123. #define AR_RIGHT (char)132
  124. #define AR_INS   (char)133  /* Insert, Delete, Home, End, PgUp, PgDn */
  125. #define AR_DEL   (char)134
  126. #define AR_HOME  (char)135
  127. #define AR_END   (char)136
  128. #define AR_PGUP  (char)137
  129. #define AR_PGDN  (char)138
  130.  
  131. /*
  132.  * TIME/DATE/PHONE STRUCTURES -----------------------------------------------
  133.  *
  134.  */
  135.  
  136. typedef long mb_time;
  137. typedef long mb_date;
  138. typedef char mb_phone[20];
  139.  
  140. /*
  141.  * RELATION STRUCTURE -------------------------------------------------------
  142.  *
  143.  */
  144.  
  145. typedef struct
  146.    {
  147.    int    relcode;                       /* File handle for relation     */
  148.    int    lckcode;                       /* Handle for lockfile          */
  149.    int    num_i, num_f, rec_len;
  150.    long   recz,  pos,   hack;
  151.    long   serial;                        /* Serial value last queried    */
  152.    int    iser;                          /* Serial field index, or num_f */
  153.  
  154.    char   relname[30];                   /* Relation name--no path       */
  155.  
  156.    int    start[MAX_FLD], siz[MAX_FLD];  /* Byte-wise info for fields    */
  157.    ftype  type[MAX_FLD];                 /* Field types                  */
  158.    char   name[MAX_FLD][21];             /* Field names                  */
  159.  
  160.    int    itype[MAX_IDX];                /* Dups/Nodups                  */
  161.    char   idxs[MAX_IDX][100];            /* Index fields                 */
  162.    char   iname[MAX_IDX][21];            /* Index name                   */
  163.  
  164.    char   mask;                          /* Encryption mask              */
  165.    ushort pid;                           /* This Process ID              */
  166.    int    rdonly;                        /* True if we can't write       */
  167.    int    exc;                           /* True if we've locked it      */
  168.    int    ver;                           /* Version number               */
  169.  
  170.    char    strobe[30];      /* Last read strobe value for each strobe */
  171.    mb_time times[30];       /* Time strobe value last changed         */
  172.    } relation;
  173.  
  174. #define RNULL (relation *)0
  175.  
  176. /*
  177.  * DEFINITIONS --------------------------------------------------------------
  178.  *
  179.  */
  180.  
  181. #ifndef UTIL_C
  182. #define mb_inc(a,b) mb_open(a,b,0)
  183. #define mb_old(a,b) mb_open(a,b,1)
  184. #define mb_tst(a)   mb_test(a,0)
  185.  
  186. #define MB_IncludeRelation   mb_inc
  187. #define MB_TestInclude       mb_tst
  188. #define MB_RemoveRelation    mb_rmv
  189. #define MB_CloseAllRelations mb_die
  190. #define MB_NumberOfRecords   mb_num
  191. #define MB_ResetNumUsers     mb_rst
  192. #define MB_AddRecord         mb_add
  193. #define MB_DeleteRecord      mb_del
  194. #define MB_DebugRelation     mb_dbg
  195. #define MB_UpdateRecord      mb_upd
  196. #define MB_SelectRecord      mb_sel
  197. #define MB_LockRelation      mb_lck
  198. #define MB_UnlockRelation    mb_unl
  199. #define MB_FormatDate        fmt_date
  200. #define MB_FormatTime        fmt_time
  201. #define MB_FormatPhone       fmt_phone
  202. #define MB_ScanDate          scn_date
  203. #define MB_ScanTime          scn_time
  204. #define MB_ScanPhone         scn_phone
  205. #endif
  206.  
  207. #define curtime()     tmtotime((struct tm *)0)
  208. #define curdate()     tmtodate((struct tm *)0)
  209. #define curdatetime() datetimetotm((mb_date)0,(mb_time)0)
  210. #define iswhite(x)    (x==' ' ||x=='\n' ||x=='\r' ||x=='\t')
  211. #define istoken(x)    (x==',' ||x==':'  ||x==';'  ||x=='#' ||x=='(' || x==')')
  212. #define putback(f)    lseek(f,_lpos,0)
  213.  
  214. /*
  215.  * GLOBAL VARIABLES ---------------------------------------------------------
  216.  *
  217.  */
  218.  
  219. #ifdef INPUT_C
  220.    char      quit_chars[20] = "";
  221.    WINDOW   *win = (WINDOW *)0;
  222. #else
  223.    extern WINDOW *win;
  224.    extern char    quit_chars[20];
  225. #endif
  226.  
  227. #ifdef MBASE_C
  228.    char     *mb_error = "";
  229.    mb_err    mb_errno = MB_OKAY;
  230. #else
  231.    extern char     *mb_error;
  232.    extern mb_err    mb_errno;
  233. #endif
  234.  
  235. /*
  236.  * DATA ENTRY STRUCTURES ----------------------------------------------------
  237.  *
  238.  */
  239.  
  240. #define FM_IN    1
  241. #define FM_OUT   2
  242. #define FM_INOUT (FM_IN|FM_OUT)
  243. #define fm_refrnum(f,n) fm_refresh(f,&(form->fields[n]))
  244.  
  245. typedef int (*int_fn)();
  246.  
  247. typedef struct
  248.  { int      y,    x,     len;
  249.    ftype    type;
  250.    int      inout, option;
  251.    int     *mode;
  252.    dataptr  buffer;
  253.    char     name[40];
  254.    charptr *opt_arr; } field;
  255.  
  256. typedef struct
  257.  { int      curmode;
  258.    int      key;          /* Return code from input() */
  259.    int      curfield;
  260.    int      nextfield;
  261.    int      numfields;
  262.    int      nummodes;
  263.    int_fn   valid_fn;
  264.    int      numlines, y, x;
  265.    field   *fields;
  266.    charptr *_scrn;       } de_form;
  267.  
  268. /*
  269.  * FUNCTION PROTOTYPES ------------------------------------------------------
  270.  *
  271.  */
  272.  
  273. #ifdef LONGARGS
  274.  
  275. #ifndef UTIL_C
  276.    extern relation *mb_open  (char     *, int, int);
  277.    extern mb_err    mb_test  (char     *, int);
  278.    extern mb_err    mb_rmv   (relation *);
  279.    extern void      mb_die   (void);
  280.    extern long      mb_num   (relation *);
  281.    extern mb_err    mb_rst   (relation *, int);
  282.    extern mb_err    mb_add   (relation *, dataptr);
  283.    extern mb_err    mb_upd   (relation *, dataptr);
  284.    extern mb_err    mb_del   (relation *);
  285.    extern void      mb_dbg   (relation *);
  286.    extern mb_err    mb_sel   (relation *, int, dataptr, mb_action, dataptr);
  287.    extern int       compare  (relation *, char *, char *, int);
  288.    extern int       idxnum   (relation *, char *);
  289.    extern void      mb_exit  (int);
  290.    extern int       strtokey (char *);
  291.    extern mb_err    mb_lck   (relation *);
  292. #endif
  293.  
  294.    extern mb_err   _chk_elck (relation *);
  295.    extern mb_err    mb_unl   (relation *);
  296.    extern void      strzcpy  (char *,     char *, int);
  297.  
  298. #ifndef MBASE_C
  299.    extern long       elap_t       (mb_time);
  300.    extern mb_time    tmtotime     (struct tm *);
  301.    extern mb_date    tmtodate     (struct tm *);
  302.    extern struct tm *datetimetotm (mb_date,     mb_time);
  303.    extern char      *fmt_date     (mb_date,     int);
  304.    extern char      *fmt_time     (mb_time,     int);
  305.    extern char      *fmt_phone    (long, long, long, long, int);
  306.    extern void       scn_phone    (long *, long *, long *, long *, char *);
  307.    extern mb_date    scn_date     (char      *);
  308.    extern mb_time    scn_time     (char      *);
  309.    extern mb_time    add_time     (char      *);
  310.    extern char      input    (dataptr,    int,    int);
  311.    extern char      getarr   (void);
  312.    extern void      display  (dataptr,    int,    int);
  313.    extern void      init_curses(void);
  314.    extern int       skip     (int,        char *);
  315.    extern void      goeol    (int,        char *);
  316.    extern char     *getword  (int);
  317.    extern int       fm_fldnum  (de_form  *,  char     *);
  318.    extern void      reltoform  (relation *,  de_form  *,  dataptr);
  319.    extern void      formtorel  (de_form  *,  relation *,  dataptr);
  320.    extern void      fm_refresh (de_form  *,  field    *);
  321.    extern void      fm_refrall (de_form  *);
  322.    extern void      fm_zero    (de_form  *);
  323.    extern int       do_form    (de_form  *);
  324.    extern dataptr   fm_data    (de_form  *,  char     *);
  325.    extern void      fm_mode    (de_form *,   int);
  326.    extern relation *mb_new      (void);
  327.    extern mb_err    mb_addindex (relation *, char *, int,   char *);
  328.    extern mb_err    mb_addfield (relation *, char *, ftype, long);
  329.    extern mb_err    mb_create   (relation *, char *, int);
  330.    extern int       mb_getname  (relation *, char *, int);
  331. #endif
  332.  
  333. #else  /* ifndef LONGARGS */
  334.  
  335. #ifndef UTIL_C
  336.    extern relation *mb_open();
  337.    extern mb_err    mb_test();
  338.    extern mb_err    mb_rmv();
  339.    extern void      mb_die();
  340.    extern long      mb_num();
  341.    extern mb_err    mb_rst();
  342.    extern mb_err    mb_add();
  343.    extern mb_err    mb_upd();
  344.    extern mb_err    mb_del();
  345.    extern void      mb_dbg();
  346.    extern mb_err    mb_sel();
  347.    extern int       compare();
  348.    extern int       idxnum();
  349.    extern void      mb_exit();
  350.    extern int       strtokey();
  351.    extern mb_err    mb_lck();
  352. #endif
  353.  
  354.    extern mb_err   _chk_elck();
  355.    extern mb_err    mb_unl();
  356.    extern void      strzcpy();
  357.  
  358. #ifndef MBASE_C
  359.    extern long       elap_t();
  360.    extern mb_time    tmtotime();
  361.    extern mb_date    tmtodate();
  362.    extern struct tm *datetimetotm();
  363.    extern char      *fmt_date();
  364.    extern char      *fmt_time();
  365.    extern char      *fmt_phone();
  366.    extern void       scn_phone();
  367.    extern mb_date    scn_date();
  368.    extern mb_time    scn_time();
  369.    extern mb_time    add_time();
  370.    extern char      input();
  371.    extern char      getarr();
  372.    extern void      display();
  373.    extern void      init_curses();
  374.    extern int       skip();
  375.    extern void      goeol();
  376.    extern char     *getword();
  377.    extern int       fm_fldnum();
  378.    extern void      reltoform();
  379.    extern void      formtorel();
  380.    extern void      fm_refresh();
  381.    extern void      fm_refrall();
  382.    extern void      fm_zero();
  383.    extern int       do_form();
  384.    extern dataptr   fm_data();
  385.    extern void      fm_mode();
  386.    extern relation *mb_new();
  387.    extern mb_err    mb_addindex();
  388.    extern mb_err    mb_addfield();
  389.    extern mb_err    mb_create();
  390.    extern int       mb_getname();
  391. #endif
  392.  
  393. #endif  /* LONGARGS */
  394.  
  395. #endif  /* MBASE_H */
  396.  
  397.