[BACK]Return to dict.h CVS log [TXT][DIR] Up to [contributed] / early-roguelike / urogue

Annotation of early-roguelike/urogue/dict.h, Revision 1.1.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