Xref: news-dnh.mv.net comp.os.msdos.djgpp:2720 Path: news-dnh.mv.net!mv!news.sprintlink.net!tank.news.pipex.net!pipex!dispatch.news.demon.net!demon!mail2news.demon.co.uk!snsys.demon.co.uk From: Martin Day Newsgroups: comp.os.msdos.djgpp Subject: Re: Putting 200k of data in an executable ? Date: Tue, 17 Oct 95 22:41:11 GMT Organization: SN Systems Lines: 56 References: Reply-To: Martin AT snsystems DOT co DOT uk To: djgpp AT sun DOT soe DOT clarkson DOT edu Dj-Gateway: from newsgroup comp.os.msdos.djgpp In article resta AT iei DOT pi DOT cnr DOT it "Giovanni Resta" writes: > I will like suggestions on how to solve this problem. > I made a program that make use of an external binary file of, say, 200k-300k. > That is, the program starts, reads in memory this file, > that is always the same (it does not change between executions) > and then proceed. > I was wondering if I can use just one file, that is putting somehow the > data inside the executable. > > I remember that some years ago, I tried to do something similar with another > compiler. I tried to statically initialize a big array of chars. > In practice I wrote a program that given a file will create a source *.c > that statically initialize an array with the data of the file. > However this approach failed on larger dataset, due to some limitation of > the compiler. > I wonder if djgpp, with its lovely flat model,\r has limitations of this kind. > > Another approach that I'm considering is to append physically the data file at > the end of the executable and then finding a way to access it directly, > but I do not know if in that case the data will be automatically loaded > somewhere in the memory (where !?) or if I must read it from the disk > peeking toward the end of the "extended" executable file. > > Suggestions are all wellcome. I'm quite a good C programmer but also quite new > to djgpp and absolutely ignorant about my 586 asm. You could define a large char array called x in assembler like this : ..globl _x ..data _x: .byte 1,2,3,4 .byte 5,6,7,8 etc. (you can put more bytes per line if you want) This is then assembled with a command line like as z.s -o z.o Your C program would then have a declaration like extern char x[]; and you would link the file z.o with your C. I just tried this and produced a 300k array very easily. -- Martin