Mercurial > hg > early-roguelike
annotate urogue/dictutil.c @ 295:1e1c81fbb533
Rogue V5: fix elemental wands.
Bolts often failed to hit, due to some struct members not being
initialized.
Reported by 'LazyCat' from RogueTemple.
| author | John "Elwin" Edwards | 
|---|---|
| date | Fri, 12 Jan 2018 18:02:39 -0500 | 
| parents | c4b12d2d1dcd | 
| children | 13b482bd9e66 | 
| rev | line source | 
|---|---|
| 256 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 1 /* | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 2 dictutil.c | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 3 | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 4 UltraRogue: The Ultimate Adventure in the Dungeons of Doom | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 5 Copyright (C) 1995 Herb Chong | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 6 All rights reserved. | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 7 | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 8 See the file LICENSE.TXT for full copyright and licensing information. | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 9 */ | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 10 | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 11 /************************************************************************* | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 12 ** Utilities for Dictionary Maintenence Functions | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 13 *************************************************************************/ | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 14 | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 15 static char sccsid[] = "%W% %G%"; | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 16 | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 17 #include <stdio.h> | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 18 #include <string.h> | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 19 #include <stdlib.h> | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 20 #if !defined(OS2) && !defined(_WIN32) | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 21 #include <unistd.h> | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 22 #else | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 23 #include <io.h> | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 24 #include <fcntl.h> | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 25 #endif | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 26 | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 27 #include "dict.h" | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 28 #include "dictutil.h" | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 29 #include "rogue.h" | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 30 | 
| 257 
c4b12d2d1dcd
UltraRogue: fix various build failures.
 John "Elwin" Edwards parents: 
256diff
changeset | 31 int dict_trace; | 
| 256 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 32 FILE *ft; | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 33 | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 34 | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 35 /*********** | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 36 ** Read 'count' characters into 'buffer' at 'offset' in a binary file | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 37 ** Return 0 on success; -1 on failure; | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 38 ***********/ | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 39 | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 40 int block_read( FILE *fi , char *buffer , size_t count , long offset ) | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 41 { | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 42 if ( fseek(fi,offset,SEEK_SET) == -1 ) | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 43 return( -1 ); | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 44 | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 45 if ( fread(buffer,1,count,fi) != count ) | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 46 return( -1 ); | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 47 return( 0 ); | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 48 } | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 49 | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 50 /*********** | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 51 ** Write 'count' characters from 'buffer' to a binary file. | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 52 ** Return -1 on failure; 0 on success. | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 53 ***********/ | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 54 | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 55 int block_write( FILE *fo , char *buffer , size_t count ) | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 56 { | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 57 if ( fwrite(buffer,1,count,fo) != count ) | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 58 return( -1 ); | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 59 return( 0 ); | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 60 } | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 61 | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 62 /*********** | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 63 ** Load a dictionary table entry with id TOC_id into memory pointed to by block. | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 64 ** Update the dictionary TOC. | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 65 ** If *block=NULL, allocate the block of memory. | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 66 ** Return 0 on success; -1 on failure. | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 67 ** Set dt_entry->ptr to where the block is stored. | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 68 ***********/ | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 69 | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 70 void *dict_load_block( DICTIONARY *dict , char *toc_id , | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 71 FILE *fi , void *block ) | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 72 { DICT_TOC_ENTRY *dt_entry; | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 73 static void *ptr; | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 74 int index, ret_code; | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 75 | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 76 index = dict_toc_index( dict , toc_id ); | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 77 if ( index != -1 ) { /* Found the id */ | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 78 dt_entry = &(dict->toc[index]); | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 79 } else { | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 80 signal_error( "dict_load_block: could not find TOC_id" , toc_id , 1 ); | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 81 return( NULL ); | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 82 } /* endif */ | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 83 | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 84 if ( block == NULL ) { | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 85 ptr = malloc( dt_entry->size ); | 
| 257 
c4b12d2d1dcd
UltraRogue: fix various build failures.
 John "Elwin" Edwards parents: 
256diff
changeset | 86 if ( dict_trace > 3 ) { | 
| 256 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 87 fprintf( ft , "\ndict_load_block allocates %lx bytes at location %p\n" , | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 88 dt_entry->size , ptr ); | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 89 } /* endif */ | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 90 } else { | 
| 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 91 ptr = block; | 
| 257 
c4b12d2d1dcd
UltraRogue: fix various build failures.
 John "Elwin" Edwards parents: 
256diff
changeset | 92 if ( dict_trace > 3 ) { | 
