+ if (MODE_COMMAND_LINE(f)) {
+ if (old_1b_segment|old_1b_offset) {
+ inregs.h.ah = 0x25;
+ inregs.h.al = 0x1b;
+ inregs.x.dx = old_1b_offset;
+ segregs.ds = old_1b_segment;
+ intdosx(&inregs, &inregs, &segregs);
+ old_1b_segment = old_1b_offset = 0;
+ }
+ } else {
+ if ((old_1b_segment|old_1b_offset) == 0) {
+ extern void iret_subr();
+ void (far *foo_subr)() = iret_subr;
+
+ inregs.h.ah = 0x35;
+ inregs.h.al = 0x1b;
+ intdosx(&inregs, &inregs, &segregs);
+ old_1b_segment = segregs.es;
+ old_1b_offset = inregs.x.bx;
+ inregs.h.ah = 0x25;
+ inregs.h.al = 0x1b;
+ inregs.x.dx = FP_OFF(foo_subr);
+ segregs.ds = FP_SEG(foo_subr);
+ intdosx(&inregs, &inregs, &segregs);
+ }
+ }