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 { |