Subversion Repositories SvarDOS

Compare Revisions

Ignore whitespace Rev 458 → Rev 459

/svarcom/trunk/rmodinit.c
37,7 → 37,7
struct rmod_props far *rmod_install(unsigned short envsize) {
char far *myptr, far *mcb;
unsigned short far *owner;
const unsigned short sizeof_rmodandprops_paras = rmod_len + sizeof(struct rmod_props) + 15 / 16;
const unsigned short sizeof_rmodandprops_paras = (0x100 + rmod_len + sizeof(struct rmod_props) + 15) / 16;
unsigned short rmodseg = 0xffff;
unsigned short envseg, origenvseg;
struct rmod_props far *res = NULL;
106,8 → 106,14
return(NULL);
}
 
/* copy rmod to its destination */
/* copy rmod to its destination, prefixed with a copy of my own PSP */
myptr = MK_FP(rmodseg, 0);
{
unsigned short i;
char *mypsp = (void *)0;
for (i = 0; i < 0x100; i++) myptr[i] = mypsp[i];
}
myptr = MK_FP(rmodseg, 0x100);
_fmemcpy(myptr, rmod, rmod_len);
 
/* mark rmod memory as "self owned" */
130,7 → 136,7
}
 
/* prepare result (rmod props) */
res = MK_FP(rmodseg, rmod_len);
res = MK_FP(rmodseg, 0x100 + rmod_len);
_fmemset(res, 0, sizeof(*res)); /* zero out */
res->rmodseg = rmodseg; /* rmod segment */
res->inputbuf[0] = 128; /* input buffer for INT 0x21, AH=0Ah*/
137,7 → 143,7
res->echoflag = 1; /* ECHO ON */
res->origenvseg = origenvseg; /* original environment segment */
 
/* write env segment to rmod buffer */
/* write env segment to rmod's PSP */
owner = MK_FP(rmodseg, RMOD_OFFSET_ENVSEG);
*owner = envseg;
 
185,10 → 191,10
const unsigned short sig[] = {0x1983, 0x1985, 0x2017, 0x2019};
unsigned char i;
/* is it rmod? */
ptr = MK_FP(*parent, 0);
ptr = MK_FP(*parent, 0x100);
for (i = 0; i < 4; i++) if (ptr[i] != sig[i]) return(NULL);
/* match successfull (rmod is my parent) */
return(MK_FP(*parent, rmod_len));
return(MK_FP(*parent, 0x100 + rmod_len));
}