Mercurial > hg > early-roguelike
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 */