diff urogue/dict.h @ 256:c495a4f288c6

Import UltraRogue from the Roguelike Restoration Project (r1490)
author John "Elwin" Edwards
date Tue, 31 Jan 2017 19:56:04 -0500
parents
children 13b482bd9e66
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/urogue/dict.h	Tue Jan 31 19:56:04 2017 -0500
@@ -0,0 +1,216 @@
+/*
+    dict.h
+
+    UltraRogue: The Ultimate Adventure in the Dungeons of Doom
+    Copyright (C) 1995 Herb Chong
+    All rights reserved.
+
+    See the file LICENSE.TXT for full copyright and licensing information.
+*/
+
+/*-----------------
+  Change history:
+  (AK:04/03/95) - Added hook for extensions to dictionary structure.
+  (AK:04/04/95) - Added dictionary signature, table of contents and parameter
+                  structure defintions and fields in DICTIONARY structure
+-------------------*/
+
+#ifndef dict_h_included
+#define dict_h_included
+
+static char dict_sccsid[] = "%W% %G%";
+
+#ifndef TRUE
+#define TRUE    1
+#define FALSE   0
+#endif
+
+#define DICT_NONE       0x00000000              /* no flags set */
+#define DICT_VALIDATE   0xdeadbeef              /* look for this in every dictionary structure */
+#define DICT_ENTRY_NONE -1                      /* index of invalid entry */
+
+typedef unsigned char BOOLEANC;
+
+/*------------------
+  string table entry
+  ------------------*/
+typedef struct string_entry {
+        long    string_offset;       /* offset in string array */
+        long    count;               /* number of occurrences of string */
+        long    next;                /* offset of next in hash chain */
+        void    *any_ptr;            /* free pointer */
+        unsigned long flags;         /* user definable flag value for string */
+        unsigned long hash_value;    /* hash value of string using hash function */
+} STRING_ENTRY;
+
+/*--------------------
+  Dictionary signature (AK:04/04/95)
+  --------------------*/
+typedef struct dict_sig_ {      /*  Dictionary signature               */
+   unsigned long  check_value;  /*  0xdeadbeef                         */
+   int            toc_size;     /*  # of entries in Table of Contents  */
+   long           nparms;       /*  # of parameters                    */
+   unsigned long  checksum;     /*  Checksum for TOC                   */
+} DICT_SIG;
+
+/*----------------------------------
+  Dictionary table of contents entry (AK:04/04/95)
+  ----------------------------------*/
+typedef struct TOC_entry_ {     /*  Dictionary table of contents entry  */
+   char           id[5];        /*  Field identifier:                   */
+   long           offset;       /*  Offset (bytes) of entry in file     */
+   long           size;         /*  Size (bytes) of entry               */
+   void           *ptr;         /*  Where entry is stored in memory     */
+   unsigned long  checksum;     /*  Checksum of entry                   */
+   int            type;         /*  0=ordinary ; 1=EVECTOR ; 2=NULL     */
+} DICT_TOC_ENTRY;
+
+/*--------------------------------
+  Dictionary parameter table entry (AK:04/04/95)
+  --------------------------------*/
+typedef struct dict_parm_entry_ {   /*  Dictionary parameter table entry  */
+   char           id[13];           /*  Parameter identifier              */
+   unsigned long  value;            /*  Parameter value                   */
+} DICT_PARM_ENTRY;
+
+
+/*---------------------------
+  Hash dictionary information
+  ---------------------------*/
+typedef struct dictionary {
+        unsigned long   check_value;            /* check validation value */
+        unsigned long   flags;                  /* flag values */
+        long    entry_count;                    /* number of used entries in each table */
+
+        char    *string_array;                  /* storage for strings */
+        long    array_size;                     /* number of bytes allocated */
+        long    array_used;                     /* number of bytes occupied */
+        int     array_growth_count;             /* number of times grown */
+
+        STRING_ENTRY    *string_table;          /* string table */
+        long    string_max;                     /* max number of entries in string table */
+        long    scan_string_index;              /* current index into string table for scan */
+        int     string_growth_count;            /* number of times had to grow string table */
+
+        long            *chains;                /* vector of array indices to hash entries */
+        int     longest_chain_length;           /* longest chain length in hash table */
+        int     allowable_chain_length;         /* chain lengths always < this */
+        long    table_size;                     /* number of elements in hash entries vector */
+        unsigned long   hash_mask;              /* mask for doing mod() function */
+        int     hash_growth_count;              /* number of times had to grow hash table */
+
+        void    *ext;                           /* Hook for extensions to the dictionary (AK:04/03/95) */
+
+        DICT_SIG         *sig;                  /* Signature (AK:04/04/95) */
+        DICT_TOC_ENTRY   *toc;                  /* Table of contents (AK:04/04/95) */
+        DICT_PARM_ENTRY  *parm;                 /* Parameters (AK:04/04/95) */
+
+} DICTIONARY;
+
+/*--------------------------------------------------------------
+  dict_create: create a dictionary and initialize its structures
+  --------------------------------------------------------------*/
+extern DICTIONARY *dict_create(
+        const long  toc_size,
+        const long  initial_string_count,
+        const long  initial_hash_entries,
+        const long  max_chain_length );
+
+/*-------------------------------------------------
+  dict_delete: deletes an entry from the dictionary
+  -------------------------------------------------*/
+extern BOOLEANC dict_delete(
+        const DICTIONARY  *dict,
+        const char        *s,
+        const long        count );
+
+/*---------------------------------------------------
+  dict_destroy: discard a dictionary and its contents
+  ---------------------------------------------------*/
+extern BOOLEANC dict_destroy(
+        DICTIONARY  *dict );
+
+/*------------------------------------------------
+  dict_export: write a dictionary to an ASCII file
+  ------------------------------------------------*/
+extern BOOLEANC dict_export(
+        DICTIONARY  *dict,
+        const char  *fname );
+
+/*-------------------------------------------------
+  dict_import: read a dictionary from an ASCII file
+  -------------------------------------------------*/
+extern DICTIONARY *dict_import(
+        const char  *dict_fname,
+        const long  initial_string_count,
+        const long  initial_hash_entries,
+        const long  max_chain_length );
+
+/*------------------------------------------------------------------
+  dict_insert: add entries into the dictionary, growing as necessary
+  ------------------------------------------------------------------*/
+extern STRING_ENTRY *dict_insert(
+        DICTIONARY           *dict,
+        char                 *s,
+        const long           occurences,
+        const unsigned long  flags,
+        void                 *any_ptr,
+        long                 *number );
+
+/*----------------------------------------------------
+  dict_load: read a dictionary from a file into memory
+  ----------------------------------------------------*/
+extern DICTIONARY *dict_load(
+        const char  *fname );
+
+/*-----------------------------------------------------------------
+  dict_merge: merges the contents of a dictionary into another one,
+  updating the contents of the destination
+  -----------------------------------------------------------------*/
+extern BOOLEANC dict_merge(
+        const DICTIONARY  *dst,
+        const DICTIONARY  *src,
+        const BOOLEANC    move );
+
+/*----------------------------------------------------
+  dict_save: save a dictionary from memory into a file
+  ----------------------------------------------------*/
+extern BOOLEANC dict_save(
+        DICTIONARY  *dict,
+        const char  *fname );
+
+/*-----------------------------------------------
+  dict_scan_begin: begin a scan of the dictionary
+  -----------------------------------------------*/
+extern BOOLEANC dict_scan_begin(
+        DICTIONARY  *dict );
+
+/*--------------------------------------------
+  dict_scan_next: get the next entry in a scan
+  --------------------------------------------*/
+extern STRING_ENTRY *dict_scan_next(
+        DICTIONARY  *dict );
+
+/*-----------------------------------------------
+  dict_search: look for entries in the dictionary
+  -----------------------------------------------*/
+extern STRING_ENTRY *dict_search(
+        const DICTIONARY  *dict,
+        const char        *s,
+        long              *number );
+
+/*----------------------------------------------------------------------
+  dict_string_by_number: return string pointer for a given string number
+  ----------------------------------------------------------------------*/
+extern STRING_ENTRY *dict_string_by_number(
+        const DICTIONARY  *dict,
+        const long        number );
+
+/*----------------------------------------------------------
+  dict_union: merges contents of 2 dictionaries into a third
+  ----------------------------------------------------------*/
+extern DICTIONARY *dict_union(
+        const DICTIONARY  *dict1,
+        const DICTIONARY  *dict2 );
+
+#endif  /* dict_h_included */