1 | /* SCCS Id: @(#)dlb.h 3.3 97/07/29 */ 2 | /* Copyright (c) Kenneth Lorber, Bethesda, Maryland, 1993. */ 3 | /* NetHack may be freely redistributed. See license for details. */ 4 | 5 | #ifndef DLB_H 6 | #define DLB_H 7 | /* definitions for data library */ 8 | 9 | #ifdef DLB 10 | 11 | /* implementations */ 12 | #ifdef MAC 13 | # define DLBRSRC /* use Mac resources */ 14 | #else 15 | # define DLBLIB /* use a set of external files */ 16 | #endif 17 | 18 | #ifdef DLBLIB 19 | /* directory structure in memory */ 20 | typedef struct dlb_directory { 21 | char *fname; /* file name as seen from calling code */ 22 | long foffset; /* offset in lib file to start of this file */ 23 | long fsize; /* file size */ 24 | char handling; /* how to handle the file (compression, etc) */ 25 | } libdir; 26 | 27 | /* information about each open library */ 28 | typedef struct dlb_library { 29 | FILE *fdata; /* opened data file */ 30 | long fmark; /* current file mark */ 31 | libdir *dir; /* directory of library file */ 32 | char *sspace; /* pointer to string space */ 33 | long nentries; /* # of files in directory */ 34 | long rev; /* dlb file revision */ 35 | long strsize; /* dlb file string size */ 36 | } library; 37 | 38 | /* library definitions */ 39 | # ifndef DLBFILE 40 | # define DLBFILE "nhdat" /* name of library */ 41 | # endif 42 | # ifndef FILENAME_CMP 43 | # define FILENAME_CMP strcmp /* case sensitive */ 44 | # endif 45 | 46 | #endif /* DLBLIB */ 47 | 48 | 49 | typedef struct dlb_handle { 50 | FILE *fp; /* pointer to an external file, use if non-null */ 51 | #ifdef DLBLIB 52 | library *lib; /* pointer to library structure */ 53 | long start; /* offset of start of file */ 54 | long size; /* size of file */ 55 | long mark; /* current file marker */ 56 | #endif 57 | #ifdef DLBRSRC 58 | int fd; /* HandleFile file descriptor */ 59 | #endif 60 | } dlb; 61 | 62 | #if defined(ULTRIX_PROTO) && !defined(__STDC__) 63 | /* buggy old Ultrix compiler wants this for the (*dlb_fread_proc) 64 | and (*dlb_fgets_proc) prototypes in struct dlb_procs (dlb.c); 65 | we'll use it in all the declarations for consistency */ 66 | #define DLB_P struct dlb_handle * 67 | #else 68 | #define DLB_P dlb * 69 | #endif 70 | 71 | boolean NDECL(dlb_init); 72 | void NDECL(dlb_cleanup); 73 | 74 | dlb *FDECL(dlb_fopen, (const char *,const char *)); 75 | int FDECL(dlb_fclose, (DLB_P)); 76 | int FDECL(dlb_fread, (char *,int,int,DLB_P)); 77 | int FDECL(dlb_fseek, (DLB_P,long,int)); 78 | char *FDECL(dlb_fgets, (char *,int,DLB_P)); 79 | int FDECL(dlb_fgetc, (DLB_P)); 80 | long FDECL(dlb_ftell, (DLB_P)); 81 | 82 | 83 | /* Resource DLB entry points */ 84 | #ifdef DLBRSRC 85 | boolean rsrc_dlb_init(void); 86 | void rsrc_dlb_cleanup(void); 87 | boolean rsrc_dlb_fopen(dlb *dp, const char *name, const char *mode); 88 | int rsrc_dlb_fclose(dlb *dp); 89 | int rsrc_dlb_fread(char *buf, int size, int quan, dlb *dp); 90 | int rsrc_dlb_fseek(dlb *dp, long pos, int whence); 91 | char *rsrc_dlb_fgets(char *buf, int len, dlb *dp); 92 | int rsrc_dlb_fgetc(dlb *dp); 93 | long rsrc_dlb_ftell(dlb *dp); 94 | #endif 95 | 96 | 97 | #else /* DLB */ 98 | 99 | # define dlb FILE 100 | 101 | # define dlb_init() 102 | # define dlb_cleanup() 103 | 104 | # define dlb_fopen fopen 105 | # define dlb_fclose fclose 106 | # define dlb_fread fread 107 | # define dlb_fseek fseek 108 | # define dlb_fgets fgets 109 | # define dlb_fgetc fgetc 110 | # define dlb_ftell ftell 111 | 112 | #endif /* DLB */ 113 | 114 | 115 | /* various other I/O stuff we don't want to replicate everywhere */ 116 | 117 | #ifndef SEEK_SET 118 | # define SEEK_SET 0 119 | #endif 120 | #ifndef SEEK_CUR 121 | # define SEEK_CUR 1 122 | #endif 123 | #ifndef SEEK_END 124 | # define SEEK_END 2 125 | #endif 126 | 127 | #define RDTMODE "r" 128 | #if (defined(MSDOS) || defined(WIN32) || defined(TOS)) && defined(DLB) 129 | #define WRTMODE "w+b" 130 | #else 131 | #define WRTMODE "w+" 132 | #endif 133 | #if (defined(MICRO) && !defined(AMIGA)) || defined(THINK_C) || defined(__MWERKS__) 134 | # define RDBMODE "rb" 135 | # define WRBMODE "w+b" 136 | #else 137 | # define RDBMODE "r" 138 | # define WRBMODE "w+" 139 | #endif 140 | 141 | #endif /* DLB_H */