home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / CONTRIB / MBASE / MBASE50.TAR / mbase / src / internal.h < prev    next >
Encoding:
C/C++ Source or Header  |  1992-10-25  |  7.0 KB  |  181 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 INTERNAL_H
  9. #define INTERNAL_H
  10.  
  11. /*
  12.  * RELATION FORMAT ----------------------------------------------------------
  13.  *
  14.  */
  15.  
  16. #define POS_SIGNATURE  0L   /* This information is described in */
  17. #define POS_UNUSED1    1L   /* more detail in the file          */
  18. #define POS_UNUSED2    2L   /*    ../dox/format.dox             */
  19. #define POS_UNUSED3    4L
  20. #define POS_FIELDPTR(x) (x == 40 ? 2L : 6L)  /* For 4.0 compatibility */
  21. #define POS_INDEXPTR  10L
  22. #define POS_RECZERO   14L
  23. #define POS_NUMREC    18L
  24. #define POS_NEXTSER   22L
  25. #define POS_NUMFIELD  26L
  26. #define POS_NUMINDEX  28L
  27. #define POS_INDICES   30L
  28.  
  29. #define lckPOS_USERS    0L   /* more detail in the file          */
  30. #define lckPOS_ELOCK    2L   /*    ../dox/format.dox             */
  31. #define lckPOS_HLOCK    4L
  32. #define lckPOS_QUEUE   10L
  33. #define lckPOS_STROBE  70L
  34.  
  35. /*
  36.  * INTERNAL STRUCTURE DEFINITIONS AND UTILITIES -----------------------------
  37.  *
  38.  */
  39.  
  40. typedef struct
  41.    {
  42.    long    num;
  43.    long    left, right, parent;
  44.    char    parbal;
  45.    int     changed;
  46.    } cache;
  47.  
  48. #define _change_cache(p,f,v)   { p->changed = 1; _changeqcache(p,f,v); }
  49. #define _changeqcache(p,f,v)     p->f = v
  50. #define _cache_field(p,d) (d==1?p->right: (d==-1?p->left : p->parent))
  51.  
  52. #ifndef BLAST_C
  53. #ifdef LONGARGS
  54.    extern relation  *_fill_info   (relation *, long, long);
  55.    extern long       _append      (relation *, dataptr);
  56.    extern mb_err     _balance     (relation *, long,    int,     int);
  57.    extern mb_err     _check       (relation *, long,    long,    int);
  58.    extern mb_err     _check_dup   (relation *, dataptr, int,     long);
  59.    extern void       _close_proc  (relation *);
  60.    extern mb_err     _clr_lck     (relation *);
  61.    extern int        _comp_double (double *, double *);
  62.    extern int        _comp_fld    (relation *, dataptr, dataptr, int);
  63.    extern int        _comp_float  (float  *, float  *);
  64.    extern int        _comp_long   (long   *, long   *);
  65.    extern int        _comp_short  (short  *, short  *);
  66.    extern int        _comp_string (char   *, char   *, int);
  67.    extern int        _comp_ulong  (ulong  *, ulong  *);
  68.    extern int        _comp_ushort (ushort *, ushort *);
  69.    extern int        _compare     (relation *, dataptr, dataptr, int);
  70.    extern void       _crypt       (relation *, dataptr);
  71.    extern void       _cryptf      (dataptr,    int,     int);
  72.    extern long       _delete      (relation *, long);
  73.    extern void       _dislink     (relation *, long, int,  long);
  74.    extern void       _divine_mask (relation *, int);
  75.    extern void       _drop        (relation *, long,    int,     long);
  76.    extern void       _dumprec     (relation *, dataptr);
  77.    extern long       _find_ends   (relation *, int,  int);
  78.    extern long       _find_seq    (relation *, long, long, int,  int);
  79.    extern mb_err     _format      (relation *, dataptr, int);
  80.    extern int        _identify    (relation *);
  81.    extern mb_err     _link        (relation *, long);
  82.    extern dataptr    _memrec      (relation *, long, dataptr);
  83.    extern dataptr    _rec         (relation *, long);
  84.    extern void       _remove      (relation *, long);
  85.    extern void       _replace     (relation *, long, long, int);
  86.    extern long       _search      (relation *, long, int,  mb_action, dataptr);
  87.    extern mb_err     _set_lck     (relation *);
  88.    extern void       _seterr      (int);
  89.    extern void       _strobe      (relation *, int);
  90.    extern void       _zero        (relation *, long, int);
  91.    extern cache     *_read_cache  (relation *, long, int);  /* CACHE.C */
  92.    extern void       _flush_cache (relation *,       int);  /* CACHE.C */
  93.    extern cache     *_new_cache   (relation *,       int);  /* CACHE.C */
  94.    extern void       _free_cache  (void);                   /* CACHE.C */
  95. #else
  96.    extern relation  *_fill_info();
  97.    extern long       _append();
  98.    extern mb_err     _balance();
  99.    extern mb_err     _check();
  100.    extern mb_err     _check_dup();
  101.    extern void       _close_proc();
  102.    extern mb_err     _clr_lck();
  103.    extern int        _comp_double();
  104.    extern int        _comp_fld();
  105.    extern int        _comp_float();
  106.    extern int        _comp_long();
  107.    extern int        _comp_short();
  108.    extern int        _comp_string();
  109.    extern int        _comp_ulong();
  110.    extern int        _comp_ushort();
  111.    extern int        _compare();
  112.    extern void       _crypt();
  113.    extern void       _cryptf();
  114.    extern long       _delete();
  115.    extern void       _dislink();
  116.    extern void       _divine_mask();
  117.    extern void       _drop();
  118.    extern void       _dumprec();
  119.    extern long       _find_ends();
  120.    extern long       _find_seq();
  121.    extern mb_err     _format();
  122.    extern int        _identify();
  123.    extern mb_err     _link();
  124.    extern dataptr    _memrec();
  125.    extern dataptr    _rec();
  126.    extern void       _remove();
  127.    extern void       _replace();
  128.    extern long       _search();
  129.    extern mb_err     _set_lck();
  130.    extern void       _seterr();
  131.    extern void       _strobe();
  132.    extern void       _zero();
  133.    extern cache     *_read_cache();     /* CACHE.C */
  134.    extern void       _flush_cache();    /* CACHE.C */
  135.    extern cache     *_new_cache();      /* CACHE.C */
  136.    extern void       _free_cache();     /* CACHE.C */
  137. #endif
  138.  
  139. #define GO_BASE(rel,rcd,idx,off) \
  140.  lseek (rel->relcode,          \
  141.         rel->recz+(rcd-1)*(rel->rec_len+(long)13*rel->num_i)+(long)13*idx+off,0)
  142. #define GO_TOP(rel,idx)  lseek (rel->relcode, POS_INDICES + (long)4*idx, 0)
  143. #define GO_NEXTS(rel)    lseek (rel->relcode, POS_NEXTSER, 0)
  144. #define GO_INDEX(rel,rcd,idx)    GO_BASE (rel, rcd,        idx,  0L)
  145. #define GO_START(rel,rcd)        GO_BASE (rel, rcd,          0,  0L)
  146. #define GO_RECID(rel,rcd)        GO_BASE (rel, rcd, rel->num_i,  0L)
  147. #define GO_BAL(rel,rcd,idx)      GO_BASE (rel, rcd,        idx, 12L)
  148. #define GO_POINT(rel,rcd,idx,d) \
  149.                 GO_BASE (rel, rcd, idx, (((d)==-1)?0L:((d)==1?4L:8L)) )
  150.  
  151. #define PARDIR (int)0x80
  152. #define BAL    (int)0x7F
  153.  
  154. #define BAL_FL ';'    /* Balance == Far Left  (off balance) */
  155. #define BAL_LT '<'    /* Balance == Left      (on balance)  */
  156. #define BAL_EV '='    /* Balance == Even :-]  (ON balance)  */
  157. #define BAL_RT '>'    /* Balance == Right     (on balance)  */
  158. #define BAL_FR '?'    /* Balance == Far Right (off balance) */
  159.  
  160. #define VAL_BAL(b)  ((int)(b-BAL_EV))
  161.  
  162. #define NUM_BAL(b)  (b==BAL_FL?-1:(b==BAL_LT?-1:(b==BAL_EV?0:(b==BAL_RT?1:1))))
  163. #define BALANCED(b) (b==BAL_LT || b==BAL_EV || b==BAL_RT)
  164.  
  165. #define togg(x) (x = 0-x)
  166.  
  167. #define lckerr(r,e,x)  { _clr_lck(r); _seterr(e); return (mb_err)(x); }
  168. #define baderr(x)      {              _seterr(x); return (mb_err)(x); }
  169. #define reterr(e,x)    {              _seterr(e); return (mb_err)(x); }
  170. #define interr(e,x)    {              _seterr(e); return    (int)(x); }
  171. #define longerr(e,x)   {              _seterr(e); return   (long)(x); }
  172. #define relerr(e,x)    {              _seterr(e); return (relation *)(x); }
  173.  
  174. #define round2(x) (x%2==0?x:(x+2-(x%2)))
  175. #define round4(x) (x%4==0?x:(x+4-(x%4)))
  176. #define round8(x) (x%8==0?x:(x+8-(x%8)))
  177. #endif
  178.  
  179. #endif
  180.  
  181.