Message-ID: <37AF96DC.4B20@ns.sympatico.ca> From: Klaas Organization: N/A X-Mailer: Mozilla 3.04 (Win95; I) MIME-Version: 1.0 Newsgroups: comp.os.msdos.djgpp Subject: Re: How do I set up predefined structures? References: <7oo1aa$cmh$1 AT news7 DOT svr DOT pol DOT co DOT uk> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Lines: 85 Date: Tue, 10 Aug 1999 00:05:00 -0300 NNTP-Posting-Host: 142.177.75.52 X-Trace: sapphire.mtt.net 934254273 142.177.75.52 (Tue, 10 Aug 1999 00:04:33 ADT) NNTP-Posting-Date: Tue, 10 Aug 1999 00:04:33 ADT To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com Andrew Davidson wrote: > > I'm trying to set up a set of predefined structures for a C based emulator > I'm writing using GCC and Allegro. It's intended to allow easy definitions > of ROM loading information and the overall description of each of the ROM > sub-sets (there are 3 sub-sets in every game: program, tile, and sprite) is > NULL terminated because it can vary in length: > > These make up the basic structures: > > typedef struct rom_double { > char *file1,*file2; > int length; > } > > typedef struct rom_triple { > char *file1,*file2,*file3; > int length; > }; > > struct rom_map { > rom_double *program_roms; > rom_triple *tile_roms; > rom_double *sprite_roms; > }; > > As an example of a simple predefined structure: > > struct rom_map game1_map = { > { /* program roms */ > {"progrom1a","progrom1b",65536}, > {"progrom2a","progrom2b",65536}, > {NULL, NULL, 0} > }, > > { /* tile roms */ > {"tilerom1a","tilerom1b","tilerom1c",65536}, > {NULL, NULL, NULL, 0} > }, > > { /* sprite roms */ > {"spriterom1a","spriterom1b",65536}, > {"spriterom2a","spriterom2b",65536}, > {"spriterom3a","spriterom3b",65536}, > {"spriterom4a","spriterom4b",65536}, > {NULL, NULL, 0} > } > }; > > However, when I compile it tons of warnings are generated, so I'm obviously > doing something hideously wrong, but I can't see what. Well, I'm not sure what your emulation and rom stuff is (something like zsnes or nesticle?) but you do have a major problem in your code. When you define a pointer, you must allocate memory in order to assign values to it. ex. #include #include #define STRING_LENGTH 25 char *mystring; void main() { //Allocate some memory, have mystring point to it. You should test //for non-zero return val... mystring = (char *)malloc(STRING_LENGTH); //Copy "Hello" to the memory location pointed to by mystring //ie. the memory previously allocated with malloc. strcpy(mystring,"Hello"); //Print this message printf("%s/n",mystring); exit(0); } Any questions? Post a follow up... -Mike