X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_bd%2Fbd_cave.c;h=07cb74a699c0308fc1d80e995a102bf389f61d30;hb=b377a0cc25c12922edb0e92050a552b86e5f7f3a;hp=1b014ccd4546f0d199a816bbdc09aabb37b348e4;hpb=676a1f66491c208d47c2b5bc6e9ce18e0a28005c;p=rocksndiamonds.git diff --git a/src/game_bd/bd_cave.c b/src/game_bd/bd_cave.c index 1b014ccd..07cb74a6 100644 --- a/src/game_bd/bd_cave.c +++ b/src/game_bd/bd_cave.c @@ -81,7 +81,7 @@ static const char* scheduling_filename[] = "bd2ckatari" }; -static struct hashtable *name_to_element; +static HashTable *name_to_element; GdElement gd_char_to_element[256]; /* color of flashing the screen, gate opening to exit */ @@ -275,14 +275,14 @@ void gd_cave_init(void) /* put names to a hash table */ /* this is a helper for file read operations */ - /* maps g_strdupped strings to elemenets (integers) */ - name_to_element = create_hashtable(str_case_hash, str_case_equal, NULL, NULL); + /* maps copied strings to elements (integers) */ + name_to_element = create_hashtable(gd_str_case_hash, gd_str_case_equal, NULL, NULL); for (i = 0; i < O_MAX; i++) { char *key; - key = g_ascii_strup(gd_elements[i].filename, -1); + key = getStringToUpper(gd_elements[i].filename); if (hashtable_exists(name_to_element, key)) /* hash value may be 0 */ Warn("Name %s already used for element %x", key, i); @@ -290,7 +290,7 @@ void gd_cave_init(void) hashtable_insert(name_to_element, key, INT_TO_PTR(i)); /* ^^^ do not free "key", as hash table needs it during the whole time! */ - key = g_strdup_printf("SCANNED_%s", key); /* new string */ + key = getStringCat2("SCANNED_", key); /* new string */ hashtable_insert(name_to_element, key, INT_TO_PTR(i)); /* once again, do not free "key" ^^^ */ @@ -322,7 +322,7 @@ void gd_cave_init(void) /* search the element database for the specified name, and return the element */ GdElement gd_get_element_from_string (const char *string) { - char *upper = g_ascii_strup(string, -1); + char *upper = getStringToUpper(string); void *value; boolean found; @@ -416,19 +416,19 @@ int gd_add_highscore(GdHighScore *highscores, const char *name, int score) qsort(highscores, GD_HIGHSCORE_NUM, sizeof(GdHighScore), gd_highscore_compare); for (i = 0; i < GD_HIGHSCORE_NUM; i++) - if (g_str_equal(highscores[i].name, name) && highscores[i].score == score) + if (strEqual(highscores[i].name, name) && highscores[i].score == score) return i; return -1; } /* for the case-insensitive hash keys */ -int str_case_equal(void *s1, void *s2) +int gd_str_case_equal(void *s1, void *s2) { return strcasecmp(s1, s2) == 0; } -unsigned int str_case_hash(void *v) +unsigned int gd_str_case_hash(void *v) { char *upper = getStringToUpper(v); unsigned int hash = get_hash_from_string(upper); @@ -438,23 +438,6 @@ unsigned int str_case_hash(void *v) return hash; } -/* for the case-insensitive hash keys */ -boolean gd_str_case_equal(gconstpointer s1, gconstpointer s2) -{ - return strcasecmp(s1, s2) == 0; -} - -guint gd_str_case_hash(gconstpointer v) -{ - char *upper; - guint hash; - - upper = g_ascii_strup(v, -1); - hash = g_str_hash(v); - free(upper); - return hash; -} - /* create new cave with default values. sets every value, also default size, diamond value etc. @@ -466,7 +449,7 @@ GdCave *gd_cave_new(void) cave = checked_calloc(sizeof(GdCave)); /* hash table which stores unknown tags as strings. */ - cave->tags = g_hash_table_new_full(gd_str_case_hash, gd_str_case_equal, free, free); + cave->tags = create_hashtable(gd_str_case_hash, gd_str_case_equal, free, free); gd_cave_set_gdash_defaults(cave); @@ -523,7 +506,7 @@ gpointer gd_cave_map_dup_size(const GdCave *cave, const gpointer map, const int return NULL; rows = checked_malloc((cave->h) * sizeof(gpointer)); - rows[0] = g_memdup (maplines[0], cell_size * cave->w * cave->h); + rows[0] = get_memcpy (maplines[0], cell_size * cave->w * cave->h); for (y = 1; y < cave->h; y++) rows[y] = (char *)rows[0] + cell_size * cave->w * y; @@ -553,7 +536,7 @@ void gd_cave_free(GdCave *cave) return; if (cave->tags) - g_hash_table_destroy(cave->tags); + hashtable_destroy(cave->tags); if (cave->random) /* random generator is a GRand * */ g_rand_free(cave->random); @@ -573,20 +556,20 @@ void gd_cave_free(GdCave *cave) gd_cave_map_free(cave->hammered_reappear); /* free objects */ - g_list_foreach(cave->objects, (GFunc) free, NULL); - g_list_free (cave->objects); + list_foreach(cave->objects, (list_fn) free, NULL); + list_free(cave->objects); /* free replays */ - g_list_foreach(cave->replays, (GFunc) gd_replay_free, NULL); - g_list_free(cave->replays); + list_foreach(cave->replays, (list_fn) gd_replay_free, NULL); + list_free(cave->replays); /* freeing main pointer */ free (cave); } -static void hash_copy_foreach(const char *key, const char *value, GHashTable *dest) +static void hash_copy_foreach(const char *key, const char *value, HashTable *dest) { - g_hash_table_insert(dest, g_strdup(key), g_strdup(value)); + hashtable_insert(dest, getStringCopy(key), getStringCopy(value)); } /* copy cave from src to destination, with duplicating dynamically allocated data */ @@ -595,13 +578,13 @@ void gd_cave_copy(GdCave *dest, const GdCave *src) int i; /* copy entire data */ - g_memmove(dest, src, sizeof(GdCave)); + memmove(dest, src, sizeof(GdCave)); /* but duplicate dynamic data */ - dest->tags = g_hash_table_new_full(gd_str_case_hash, gd_str_case_equal, - free, free); + dest->tags = create_hashtable(gd_str_case_hash, gd_str_case_equal, free, free); + if (src->tags) - g_hash_table_foreach(src->tags, (GHFunc) hash_copy_foreach, dest->tags); + hashtable_foreach(src->tags, (hashtable_fn)hash_copy_foreach, dest->tags); dest->map = gd_cave_map_dup(src, map); dest->hammered_reappear = gd_cave_map_dup(src, hammered_reappear); @@ -618,21 +601,21 @@ void gd_cave_copy(GdCave *dest, const GdCave *src) /* copy objects list */ if (src->objects) { - GList *iter; + List *iter; dest->objects = NULL; /* new empty list */ for (iter = src->objects; iter != NULL; iter = iter->next) /* do a deep copy */ - dest->objects = g_list_append(dest->objects, g_memdup (iter->data, sizeof (GdObject))); + dest->objects = list_append(dest->objects, get_memcpy (iter->data, sizeof (GdObject))); } /* copy replays */ if (src->replays) { - GList *iter; + List *iter; dest->replays = NULL; for (iter = src->replays; iter != NULL; iter = iter->next) /* do a deep copy */ - dest->replays = g_list_append(dest->replays, gd_replay_new_from_replay(iter->data)); + dest->replays = list_append(dest->replays, gd_replay_new_from_replay(iter->data)); } /* copy random number generator */ @@ -794,18 +777,6 @@ void gd_cave_c64_random_set_seed(GdCave *cave, int seed1, int seed2) gd_c64_random_set_seed(&cave->c64_rand, seed1, seed2); } -/* - select random colors for a given cave. - this function will select colors so that they should look somewhat nice; for example - brick walls won't be the darkest color, for example. -*/ -static inline void swap(int *i1, int *i2) -{ - int t = *i1; - *i1 = *i2; - *i2 = t; -} - /* shrink cave if last line or last row is just steel wall (or (invisible) outbox). @@ -1417,7 +1388,7 @@ GdReplay *gd_replay_new_from_replay(GdReplay *orig) { GdReplay *rep; - rep = g_memdup(orig, sizeof(GdReplay)); + rep = get_memcpy(orig, sizeof(GdReplay)); /* replicate dynamic data */ rep->comment = getStringCopy(orig->comment);