home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c185 / 2.ddi / OWLSRC.EXE / CSCAPE / SOURCE / BBCDECL.H next >
Encoding:
C/C++ Source or Header  |  1989-09-07  |  2.5 KB  |  96 lines

  1. /*
  2.     bbcdecl.h
  3.  
  4.     % byte block chain header
  5.  
  6.     OWL 1.1
  7.     Copyright (c) 1988, by Oakland Group, Inc.
  8.     ALL RIGHTS RESERVED.
  9.  
  10.     Revision History:
  11.     -----------------
  12.      8/21/88 jmd    preened and poked
  13.     10/17/88 jmd    added _arg
  14. */
  15.  
  16. typedef struct bblock_struct {
  17.  
  18.     struct bblock_struct    *prev;
  19.     struct bblock_struct    *next;
  20.  
  21.     char            *start; /* pointer to the memory chunk */
  22.  
  23.     unsigned int    len;    /* used length */
  24.     unsigned int    size;    /* allocated size */
  25.  
  26.     long            row;    /* hint */
  27.     unsigned int    off;    /* offset from "start" (in bytes) to start of current row */
  28.  
  29.     byte            attr;    /* for text blocks */
  30.  
  31. } *bblock_type;
  32.  
  33. typedef struct {
  34.  
  35.     unsigned int    esize;        /* element size */
  36.     unsigned int    bsize;        /* block size */
  37.     unsigned int    asize;        /* minimum alloc size */
  38.  
  39.     bblock_type        b;
  40.  
  41. } bbc_struct, *bbc_type;
  42.  
  43. typedef struct {
  44.  
  45.     bblock_type    b;
  46.     int            off;
  47.     char         *p;
  48.     long        len;
  49.  
  50. } bbpeek_struct, *bbpeek_type;
  51.  
  52. extern bbc_type     bbc_Open(_arg3(unsigned int, unsigned int, unsigned int));
  53. extern void            bbc_Close(_arg1(bbc_type));
  54. extern long            bbc_work(_arg6(bbc_type, long, char*, char, long, int));
  55. extern long            bbc_Del(_arg3(bbc_type, long, long));
  56. extern boolean        bbc_Attr(_arg4(bbc_type, long, byte, long));
  57.  
  58. extern bblock_type     bblock_open(_arg4(bbc_type, long, bblock_type, byte));
  59. extern bblock_type     bblock_grow(_arg3(bbc_type, bblock_type, long));
  60. extern bblock_type     bblock_split(_arg3(bbc_type, bblock_type, long));
  61.  
  62. extern bblock_type     bblock_rewind(_arg1(bblock_type));
  63. extern void            bblock_close(_arg2(bblock_type, int));
  64. extern int            bbpeek(_arg1(bbpeek_type));
  65.  
  66. #define BBC_SET     FALSE
  67. #define BBC_INSERT    TRUE
  68. #define BBC_GET     2
  69.  
  70. #define BBC_SINGLE     0
  71. #define BBC_BELOW    1
  72.  
  73. #define bblen(b)    ((b)->len)
  74. #define bboff(b)    ((b)->off)
  75.  
  76. #define bbc_Copy(b, offset, line, len, ins) \
  77.     bbc_work(b, offset, line, 0, len, ins)
  78.  
  79. #define bbc_Set(b, offset, chr, len, ins) \
  80.     bbc_work(b, offset, NULL, chr, len, ins)
  81.  
  82. #define bbc_Get(b, offset, buf, len) \
  83.     bbc_work(b, offset, buf, 0, len, BBC_GET)
  84.  
  85. /* for use when "offset" += n 'ing */
  86. #define bbadv(b, o, chk) while ((o) >= (b)->len){if((b)==NULL){(chk)=TRUE;break;} else{(o) -= (b)->len; \
  87.                 (b)=(b)->next;}}
  88.  
  89. /* for use only when "offset"++ 'ing */
  90. #define bbinc(b, o, t)    if ((o) >= (b)->len){(b)=(b)->next;(o)=0;(t)=(b)->start;}
  91.  
  92. #define bblockchk(b, t, e, chk) while ((t) >= (e)){if((b)->next==NULL){    \
  93.                 (chk)=TRUE;break;} else{(b)=(b)->next;(t)=(b)->start;(e)=(b)->end;}}
  94.  
  95.  
  96.