home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / CSAPE32.ARJ / INCLUDE / BBCDECL.H < prev    next >
C/C++ Source or Header  |  1990-04-05  |  3KB  |  104 lines

  1. /*
  2.     bbcdecl.h
  3.  
  4.     % byte block chain header
  5.  
  6.     OWL 1.2
  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.      3/03/90 jdc    changed char's to byte's
  15.      3/28/90 jmd    ansi-fied
  16. */
  17.  
  18. typedef struct bblock_struct {
  19.  
  20.     struct bblock_struct    *prev;
  21.     struct bblock_struct    *next;
  22.  
  23.     char            *start; /* pointer to the memory chunk */
  24.  
  25.     unsigned int    len;    /* used length */
  26.     unsigned int    size;    /* allocated size */
  27.  
  28.     long            row;    /* hint */
  29.     unsigned int    off;    /* offset from "start" (in bytes) to start of current row */
  30.  
  31.     byte            attr;    /* for text blocks */
  32.  
  33. } *bblock_type;
  34.  
  35. typedef struct _bbc {
  36.  
  37.     unsigned int    esize;        /* element size */
  38.     unsigned int    bsize;        /* block size */
  39.     unsigned int    asize;        /* minimum alloc size */
  40.  
  41.     bblock_type        b;
  42.  
  43. } bbc_struct, *bbc_type;
  44.  
  45. typedef struct _bbpeek {
  46.  
  47.     bblock_type    b;
  48.     int            off;
  49.     char         *p;
  50.     long        len;
  51.  
  52. } bbpeek_struct, *bbpeek_type;
  53.  
  54. /* -------------------------------------------------------------------------- */
  55. /* function prototypes */
  56.  
  57. /* BBCHAIN.C */
  58. extern bbc_type    bbc_Open(unsigned esize, unsigned bsize, unsigned asize);
  59. extern long        bbc_work(bbc_type bbc, long offset, char *line, byte chr, long len, int mode);
  60. extern boolean    bbc_Attr(bbc_type bbc, long offset, byte attr, long len);
  61. extern long        bbc_Del(bbc_type bbc, long offset, long len);
  62. extern void        bbc_Close(bbc_type bbc);
  63. extern void        bblock_close(bblock_type b, int flag);
  64. extern int        bbpeek(bbpeek_type bp);
  65. extern bblock_type    bblock_open(bbc_type bbc, long size, bblock_type prev, byte attr);
  66. extern bblock_type    bblock_grow(bbc_type bbc, bblock_type b, long size);
  67. extern bblock_type    bblock_split(bbc_type bbc, bblock_type top, long offset);
  68. extern bblock_type    bblock_rewind(bblock_type b);
  69.  
  70. /* -------------------------------------------------------------------------- */
  71. /* macros */
  72.  
  73. #define BBC_SET     FALSE
  74. #define BBC_INSERT    TRUE
  75. #define BBC_GET     2
  76. #define BBC_ENDINS    3
  77.  
  78. #define BBC_SINGLE     0
  79. #define BBC_BELOW    1
  80.  
  81. #define bblen(b)    ((b)->len)
  82. #define bboff(b)    ((b)->off)
  83.  
  84. #define bbc_Copy(b, offset, line, len, ins) \
  85.     bbc_work(b, offset, line, 0, len, ins)
  86.  
  87. #define bbc_Set(b, offset, chr, len, ins) \
  88.     bbc_work(b, offset, NULL, chr, len, ins)
  89.  
  90. #define bbc_Get(b, offset, buf, len) \
  91.     bbc_work(b, offset, buf, 0, len, BBC_GET)
  92.  
  93. /* for use when "offset" += n 'ing */
  94. #define bbadv(b, o, chk) while ((o) >= (b)->len){if((b)==NULL){(chk)=TRUE;break;} else{(o) -= (b)->len; \
  95.                 (b)=(b)->next;}}
  96.  
  97. /* for use only when "offset"++ 'ing */
  98. #define bbinc(b, o, t)    if ((o) >= (b)->len){(b)=(b)->next;(o)=0;(t)=(b)->start;}
  99.  
  100. #define bblockchk(b, t, e, chk) while ((t) >= (e)){if((b)->next==NULL){    \
  101.                 (chk)=TRUE;break;} else{(b)=(b)->next;(t)=(b)->start;(e)=(b)->end;}}
  102.  
  103.  
  104.