Annotation of early-roguelike/urogue/dict.h, Revision 1.1
1.1 ! rubenllo 1: /*
! 2: dict.h
! 3:
! 4: UltraRogue: The Ultimate Adventure in the Dungeons of Doom
! 5: Copyright (C) 1995 Herb Chong
! 6: All rights reserved.
! 7:
! 8: See the file LICENSE.TXT for full copyright and licensing information.
! 9: */
! 10:
! 11: /*-----------------
! 12: Change history:
! 13: (AK:04/03/95) - Added hook for extensions to dictionary structure.
! 14: (AK:04/04/95) - Added dictionary signature, table of contents and parameter
! 15: structure defintions and fields in DICTIONARY structure
! 16: -------------------*/
! 17:
! 18: #ifndef dict_h_included
! 19: #define dict_h_included
! 20:
! 21: static char dict_sccsid[] = "%W% %G%";
! 22:
! 23: #ifndef TRUE
! 24: #define TRUE 1
! 25: #define FALSE 0
! 26: #endif
! 27:
! 28: #define DICT_NONE 0x00000000 /* no flags set */
! 29: #define DICT_VALIDATE 0xdeadbeef /* look for this in every dictionary structure */
! 30: #define DICT_ENTRY_NONE -1 /* index of invalid entry */
! 31:
! 32: typedef unsigned char BOOLEANC;
! 33:
! 34: /*------------------
! 35: string table entry
! 36: ------------------*/
! 37: typedef struct string_entry {
! 38: long string_offset; /* offset in string array */
! 39: long count; /* number of occurrences of string */
! 40: long next; /* offset of next in hash chain */
! 41: void *any_ptr; /* free pointer */
! 42: unsigned long flags; /* user definable flag value for string */
! 43: unsigned long hash_value; /* hash value of string using hash function */
! 44: } STRING_ENTRY;
! 45:
! 46: /*--------------------
! 47: Dictionary signature (AK:04/04/95)
! 48: --------------------*/
! 49: typedef struct dict_sig_ { /* Dictionary signature */
! 50: unsigned long check_value; /* 0xdeadbeef */
! 51: int toc_size; /* # of entries in Table of Contents */
! 52: long nparms; /* # of parameters */
! 53: unsigned long checksum; /* Checksum for TOC */
! 54: } DICT_SIG;
! 55:
! 56: /*----------------------------------
! 57: Dictionary table of contents entry (AK:04/04/95)
! 58: ----------------------------------*/
! 59: typedef struct TOC_entry_ { /* Dictionary table of contents entry */
! 60: char id[5]; /* Field identifier: */
! 61: long offset; /* Offset (bytes) of entry in file */
! 62: long size; /* Size (bytes) of entry */
! 63: void *ptr; /* Where entry is stored in memory */
! 64: unsigned long checksum; /* Checksum of entry */
! 65: int type; /* 0=ordinary ; 1=EVECTOR ; 2=NULL */
! 66: } DICT_TOC_ENTRY;
! 67:
! 68: /*--------------------------------
! 69: Dictionary parameter table entry (AK:04/04/95)
! 70: --------------------------------*/
! 71: typedef struct dict_parm_entry_ { /* Dictionary parameter table entry */
! 72: char id[13]; /* Parameter identifier */
! 73: unsigned long value; /* Parameter value */
! 74: } DICT_PARM_ENTRY;
! 75:
! 76:
! 77: /*---------------------------
! 78: Hash dictionary information
! 79: ---------------------------*/
! 80: typedef struct dictionary {
! 81: unsigned long check_value; /* check validation value */
! 82: unsigned long flags; /* flag values */
! 83: long entry_count; /* number of used entries in each table */
! 84:
! 85: char *string_array; /* storage for strings */
! 86: long array_size; /* number of bytes allocated */
! 87: long array_used; /* number of bytes occupied */
! 88: int array_growth_count; /* number of times grown */
! 89:
! 90: STRING_ENTRY *string_table; /* string table */
! 91: long string_max; /* max number of entries in string table */
! 92: long scan_string_index; /* current index into string table for scan */
! 93: int string_growth_count; /* number of times had to grow string table */
! 94:
! 95: long *chains; /* vector of array indices to hash entries */
! 96: int longest_chain_length; /* longest chain length in hash table */
! 97: int allowable_chain_length; /* chain lengths always < this */
! 98: long table_size; /* number of elements in hash entries vector */
! 99: unsigned long hash_mask; /* mask for doing mod() function */
! 100: int hash_growth_count; /* number of times had to grow hash table */
! 101:
! 102: void *ext; /* Hook for extensions to the dictionary (AK:04/03/95) */
! 103:
! 104: DICT_SIG *sig; /* Signature (AK:04/04/95) */
! 105: DICT_TOC_ENTRY *toc; /* Table of contents (AK:04/04/95) */
! 106: DICT_PARM_ENTRY *parm; /* Parameters (AK:04/04/95) */
! 107:
! 108: } DICTIONARY;
! 109:
! 110: /*--------------------------------------------------------------
! 111: dict_create: create a dictionary and initialize its structures
! 112: --------------------------------------------------------------*/
! 113: extern DICTIONARY *dict_create(
! 114: const long toc_size,
! 115: const long initial_string_count,
! 116: const long initial_hash_entries,
! 117: const long max_chain_length );
! 118:
! 119: /*-------------------------------------------------
! 120: dict_delete: deletes an entry from the dictionary
! 121: -------------------------------------------------*/
! 122: extern BOOLEANC dict_delete(
! 123: const DICTIONARY *dict,
! 124: const char *s,
! 125: const long count );
! 126:
! 127: /*---------------------------------------------------
! 128: dict_destroy: discard a dictionary and its contents
! 129: ---------------------------------------------------*/
! 130: extern BOOLEANC dict_destroy(
! 131: DICTIONARY *dict );
! 132:
! 133: /*------------------------------------------------
! 134: dict_export: write a dictionary to an ASCII file
! 135: ------------------------------------------------*/
! 136: extern BOOLEANC dict_export(
! 137: DICTIONARY *dict,
! 138: const char *fname );
! 139:
! 140: /*-------------------------------------------------
! 141: dict_import: read a dictionary from an ASCII file
! 142: -------------------------------------------------*/
! 143: extern DICTIONARY *dict_import(
! 144: const char *dict_fname,
! 145: const long initial_string_count,
! 146: const long initial_hash_entries,
! 147: const long max_chain_length );
! 148:
! 149: /*------------------------------------------------------------------
! 150: dict_insert: add entries into the dictionary, growing as necessary
! 151: ------------------------------------------------------------------*/
! 152: extern STRING_ENTRY *dict_insert(
! 153: DICTIONARY *dict,
! 154: char *s,
! 155: const long occurences,
! 156: const unsigned long flags,
! 157: void *any_ptr,
! 158: long *number );
! 159:
! 160: /*----------------------------------------------------
! 161: dict_load: read a dictionary from a file into memory
! 162: ----------------------------------------------------*/
! 163: extern DICTIONARY *dict_load(
! 164: const char *fname );
! 165:
! 166: /*-----------------------------------------------------------------
! 167: dict_merge: merges the contents of a dictionary into another one,
! 168: updating the contents of the destination
! 169: -----------------------------------------------------------------*/
! 170: extern BOOLEANC dict_merge(
! 171: const DICTIONARY *dst,
! 172: const DICTIONARY *src,
! 173: const BOOLEANC move );
! 174:
! 175: /*----------------------------------------------------
! 176: dict_save: save a dictionary from memory into a file
! 177: ----------------------------------------------------*/
! 178: extern BOOLEANC dict_save(
! 179: DICTIONARY *dict,
! 180: const char *fname );
! 181:
! 182: /*-----------------------------------------------
! 183: dict_scan_begin: begin a scan of the dictionary
! 184: -----------------------------------------------*/
! 185: extern BOOLEANC dict_scan_begin(
! 186: DICTIONARY *dict );
! 187:
! 188: /*--------------------------------------------
! 189: dict_scan_next: get the next entry in a scan
! 190: --------------------------------------------*/
! 191: extern STRING_ENTRY *dict_scan_next(
! 192: DICTIONARY *dict );
! 193:
! 194: /*-----------------------------------------------
! 195: dict_search: look for entries in the dictionary
! 196: -----------------------------------------------*/
! 197: extern STRING_ENTRY *dict_search(
! 198: const DICTIONARY *dict,
! 199: const char *s,
! 200: long *number );
! 201:
! 202: /*----------------------------------------------------------------------
! 203: dict_string_by_number: return string pointer for a given string number
! 204: ----------------------------------------------------------------------*/
! 205: extern STRING_ENTRY *dict_string_by_number(
! 206: const DICTIONARY *dict,
! 207: const long number );
! 208:
! 209: /*----------------------------------------------------------
! 210: dict_union: merges contents of 2 dictionaries into a third
! 211: ----------------------------------------------------------*/
! 212: extern DICTIONARY *dict_union(
! 213: const DICTIONARY *dict1,
! 214: const DICTIONARY *dict2 );
! 215:
! 216: #endif /* dict_h_included */
CVSweb