#include "pmc.h" long __pascal fileexec (STR fnm, STR cline) { REGSTRUCT rs; DWORD oldlowsize; STR nextstr = (STR)_lowbufptr + 22; int r; rs.w.FLAGS = rs.d.SSSP = 0; if (((DWORD)fnm + database) > 0xfffff) { nextstr = stpcpy (nextstr, fnm) + 1; fnm = (STR)_lowbufptr + 22; } strcpy (nextstr + 2, cline); r = strlen (cline); nextstr[0] = r + 1; nextstr[1] = ' '; nextstr[2 + r] = 0xd; cline = nextstr; ((WORD *)_lowbufptr)[0] = envseg; ((WORD *)_lowbufptr)[1] = (DWORD)cline + database & 15; ((WORD *)_lowbufptr)[2] = (DWORD)cline + database >> 4; ((WORD *)_lowbufptr)[3] = 0x5c; ((WORD *)_lowbufptr)[4] = pspseg; ((WORD *)_lowbufptr)[5] = 0x6c; ((WORD *)_lowbufptr)[6] = pspseg; oldlowsize = lowheapblock.size; mbsquish (&lowheapblock); rs.w.ES = pspseg; rs.w.BX = ((lowheapblock.base + lowheapblock.size + 15) - pspbase) >> 4; rs.b.AH = 0x4a; xlt_simrmint (0x21, &rs, 0); rs.w.ES = (DWORD)_lowbufptr + database >> 4; rs.w.BX = (DWORD)_lowbufptr + database & 15; rs.w.DS = (DWORD)fnm + database >> 4; rs.w.DX = (DWORD)fnm + database & 15; rs.w.AX = 0x4b00; r = xlt_simrmint (0x21, &rs, 0); if (!r && (rs.w.FLAGS & fCF)) r = rs.d.EAX | 0xffff0000; mbunsquish (&lowheapblock, oldlowsize); rs.w.ES = pspseg; rs.w.BX = ((lowheapblock.base + lowheapblock.size + 15) - pspbase) >> 4; rs.b.AH = 0x4a; xlt_simrmint (0x21, &rs, 0); if (r < 0) return r; rs.b.AH = 0x4d; xlt_simrmint (0x21, &rs, 0); return rs.b.AL; }