Date: Wed, 11 Jun 1997 13:35:06 -0700 From: Bill Currie Subject: Re: stubinfo_minkeep patches To: djgpp-workers AT delorie DOT com Reply-to: billc AT blackmagic DOT tait DOT co DOT nz Message-id: <339F0BFA.23CD@blackmagic.tait.co.nz> Organization: Tait Electronics NZ MIME-version: 1.0 Content-type: multipart/mixed; boundary="------------4C07336D4EB" References: <339EFC8F DOT 33C3 AT blackmagic DOT tait DOT co DOT nz> Precedence: bulk This is a multi-part message in MIME format. --------------4C07336D4EB Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Bill Currie wrote: > > Here are the patches to convert stubinfo_minkeep from bytes to > paragraphs (to allow larger transfer buffers). Full backwards > compatability is maintained in both stubedit and libc. Opps, didn't mean to include djasm patches, they were meant to be separate. > Known problems: > o getchar() (or printf after printing) aborts if minkeep==64k (65k ok) > o v2load.c still has the older stubinfo hardcoded. > > I'll be looking into the first problem, and I don't know if the second > is worth fixing. Found the problem, see my other post for details > Bill > -- > Leave others their otherness. Here is a replacement patch for stubedit (if my patches are applied at all, which I now doubt) that fixes a problem with older stubinfos for minkeep (was adding 15 to the size in bytes for 2.00 stubs). Bill -- Leave others their otherness. --------------4C07336D4EB Content-Type: text/plain; charset=us-ascii; name="STUBEDIT.PAT" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="STUBEDIT.PAT" *** stubedit.c.~ Sat Oct 26 10:09:48 1996 --- stubedit.c Wed Jun 11 13:28:00 1997 *************** *** 13,18 **** --- 13,19 ---- unsigned long size_of_stubinfo = 0; char *client_stub_info; + unsigned short stubinfo_version=0; void find_info(char *filename) { *************** *** 37,42 **** --- 38,51 ---- exit(1); } + stubinfo_version=(test_magic[12]-'0')*0x0100+ + (test_magic[14]-'0')*0x0010+ + (test_magic[15]-'0')*0x0001; + if (isdigit(test_magic[11])) + { + stubinfo_version+=(test_magic[11]-'0')*0x1000; + } + fread(header, 4, 1, f); size_of_stubinfo = (header[0]) | (header[1]<<8) | (header[2])<<16 | (header[3]<<24); *************** *** 126,131 **** --- 135,146 ---- sprintf(buf, "%#lx (%dk)", v, v / 1024L); } + void num_p2s(void *addr, char *buf) + { + unsigned long v = (*(unsigned short *)addr)*(stubinfo_version>=0x201?16:1); + sprintf(buf, "%#lx (%dk)", v, v / 1024L); + } + void num_s2v(void *addr, char *buf) { unsigned long r = 0; *************** *** 145,150 **** --- 160,191 ---- *(unsigned long *)addr = r; } + void num_s2p(void *addr, char *buf) + { + unsigned long r = 0; + char s = 0; + sscanf(buf, "%i%c", &r, &s); + switch (s) + { + case 'k': + case 'K': + r *= 1024L; + break; + case 'm': + case 'M': + r *= 1048576L; + break; + } + if (stubinfo_version>=0x201) + { + *(unsigned short *)addr = (r+15)/16; + } + else + { + *(unsigned short *)addr = r; + } + } + struct { char *short_name; char *long_name; *************** *** 162,168 **** "bufsize", "Size of real-memory transfer buffer (bytes/K/M)", STUBINFO_MINKEEP, ! num_v2s, num_s2v }, { "runfile", --- 203,209 ---- "bufsize", "Size of real-memory transfer buffer (bytes/K/M)", STUBINFO_MINKEEP, ! num_p2s, num_s2p }, { "runfile", *************** *** 220,225 **** --- 261,269 ---- give_help(); find_info(argv[1]); + if (argc <= 2) + fprintf(stderr, "stubinfo version %x.%02x\n",stubinfo_version>>8, + stubinfo_version&0xff); if (view_only) { --------------4C07336D4EB--