Subversion Repositories SvarDOS

Compare Revisions

Ignore whitespace Rev 448 → Rev 449

/svarcom/trunk/sayonara.c
31,14 → 31,18
 
/* rewires my parent pointer, uninstalls rmod let DOS terminate me, UNLESS
* my parent is unknown */
void sayonara(unsigned short rmodseg) {
void sayonara(struct rmod_props far *rmod) {
unsigned short rmodseg = rmod->rmodseg;
unsigned long far *orgparent = MK_FP(rmodseg, RMOD_OFFSET_ORIGPARENT);
unsigned long *myparent = (void *)0x0A;
unsigned short far *rmodenv_ptr = MK_FP(rmodseg, RMOD_OFFSET_ENVSEG);
unsigned short rmodenv = *rmodenv_ptr;
 
/* set my parent back to original value (if 0 = shell is permanent) */
if (*orgparent == 0) return;
/* detect "I am the origin shell" situations */
if (*orgparent == 0xffff) return; /* original parent set to 0xffff (DOS-C / FreeDOS) */
if (rmod->flags & FLAG_PERMANENT) return; /* COMMAND.COM /P */
 
/* set my parent back to original value */
*myparent = *orgparent;
 
_asm {