Mail Archives: djgpp-workers/1997/06/10/21:37:16
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--
- Raw text -