home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / CSAPE32.ARJ / INCLUDE / BFDECL.H < prev    next >
C/C++ Source or Header  |  1990-12-03  |  4KB  |  116 lines

  1. /*
  2.     bfdecl.h
  3.  
  4.     % block file header
  5.  
  6.     OWL 1.2
  7.     Copyright (c) 1988, by Oakland Group, Inc.
  8.     ALL RIGHTS RESERVED.
  9.  
  10.     Revision History:
  11.     -----------------
  12.      2/02/89 jdc    added bfile_Clear and added fflush() in bfile_Read()
  13.      7/27/89 jdc    renamed macros and removed static buffer
  14.      8/09/89 jdc    changed oslist_GetSym to oslist_Get
  15.      1/21/90 jdc    changed oslist stuff
  16.      1/24/90 jdc    preened
  17.  
  18.      3/28/90 jmd    ansi-fied
  19.      4/15/90 jdc    added bfile_ReadOnly, preened
  20.      9/07/90 jmd    renamed oslist stuff
  21.     10/28/90 jdc    added bfile_GetID macro
  22.     12/03/90 jdc    changed readonly's to onlyread's
  23. */
  24.  
  25. /* in oslist.h
  26. #define    OSLIST_BADNAME        -1    */
  27.  
  28. #define    BFILE_DIR            -2
  29. #define    BFILE_NOMORE        -3
  30.  
  31. #define COMM_LEN        50
  32. #define    BHEAD_LEN        11L
  33. #define    THEAD_LEN        7L
  34. #define    FHEAD_LEN        ((long)COMM_LEN + BHEAD_LEN)
  35.  
  36. typedef struct bfile_struct {
  37.  
  38.     unsigned    block_size;
  39.     oslist_type        dir;
  40.  
  41.     FILE            *stream;
  42.     char            *path;
  43.  
  44.     int             freeb;
  45.  
  46.     int     current_name;    /* bfile_Push() and bfile_Pop() depend on          */
  47.     int     current_block;    /* the current order of elements in bfile_struct */
  48.     int     curnext_block;    /* changing the order will BREAK code              */
  49.  
  50.     unsigned         curblock_size;
  51.     unsigned        new_find;
  52.  
  53.     xarray            push;
  54.     int                pindex;
  55.  
  56.     char             *comment;
  57.  
  58. } *bfile_type;
  59.  
  60. /* -------------------------------------------------------------------------- */
  61. /* function prototypes */
  62.  
  63. /* BFILE.C */
  64. extern bfile_type     bf_open(char *pathname, unsigned block_size, char *comment, boolean onlyread);
  65. extern unsigned     bf_gets(bfile_type bfile, char *buf, unsigned buf_len, char end_char);
  66.  
  67. extern boolean    bfile_Find(bfile_type bfile, char *name, int type);
  68. extern boolean    bfile_Write(bfile_type bfile, char *data, unsigned len);
  69. extern boolean    bfile_pad(bfile_type bfile);
  70. extern unsigned bfile_Read(bfile_type bfile, char *buf, unsigned buf_len);
  71. extern void        bfile_Close(bfile_type bfile);
  72. extern boolean    bfile_Push(bfile_type bfile);
  73. extern boolean    bfile_Pop(bfile_type bfile);
  74. extern void        bfile_PutFreeB(bfile_type bfile, int block);
  75. extern int        bfile_GetFreeB(bfile_type bfile);
  76. extern void        bfile_WriteDir(bfile_type bfile);
  77.  
  78. /* BFAUX.C */
  79. extern boolean    bfile_FindEnd(bfile_type bfile, char *name, int type);
  80. extern void        bfile_Del(bfile_type bfile, char *name);
  81.  
  82. /* -------------------------------------------------------------------------- */
  83. /* macros */
  84.  
  85. #define bfile_Open(path, bsize, comment)    \
  86.                 bf_open(path, bsize, comment, FALSE)
  87.  
  88. #define bfile_ReadOnly(path, bsize, comment)    \
  89.                 bf_open(path, bsize, comment, TRUE)
  90.  
  91. #define bfile_Gets(bf, buf, blen)    bf_gets(bf, buf, blen, '\n')
  92.  
  93. #define    bfwseek(bfile)    fseek((bfile)->stream,\
  94.     ( (long)(bfile)->current_block*( (long)(bfile)->block_size+BHEAD_LEN+THEAD_LEN ) ) + FHEAD_LEN,\
  95.     SEEK_SET)
  96.  
  97. #define    bfrseek(bfile)    fseek((bfile)->stream,\
  98.     ( (long)(bfile)->current_block*( (long)(bfile)->block_size+BHEAD_LEN+THEAD_LEN ) ) + FHEAD_LEN+THEAD_LEN,\
  99.     SEEK_SET)
  100.  
  101. #define bfile_GetDirList(bfile)                ((bfile)->dir)
  102. #define bfile_GetDirSize(bfile)                oslist_GetSize((bfile)->dir)
  103. #define bfile_CloseDir(bfile)                oslist_Close((bfile)->dir)
  104.  
  105. #define bfile_FindDirHandle(bfile, name)    oslist_FindHandle((bfile)->dir, name)
  106. #define bfile_DirAlphaHandle(bfile, a)        oslist_GetAlphaHandle((bfile)->dir, a)
  107.  
  108. #define    bfile_SetDirName(bfile, s, d)         oslist_SetSym((bfile)->dir, s, d)
  109. #define    bfile_GetDirName(bfile, h)            oslist_GetSym((bfile)->dir, h)
  110. #define bfile_GetDirData(bfile, h)             oslist_GetData((bfile)->dir, h)
  111. #define    bfile_GetDirAlpha(bfile, h)            oslist_GetSym((bfile)->dir, oslist_GetAlphaHandle((bfile)->dir, h))
  112.  
  113. #define bfile_GetID(bfile, h)                 (((int*)bfile_GetDirData(bfile, h))[1])
  114. #define bfile_Contains(bfile, name)    \
  115.     ((bfile_FindDirHandle(bfile, name) != OSLIST_BADNAME) ? TRUE:FALSE)
  116.