home *** CD-ROM | disk | FTP | other *** search
- /*
- ** running bound DJGPP exe-files
- ** go32.exe without DPMI
- ** rsxdj.exe with DPMI
- */
-
- #include <process.h>
- #include <dos.h>
-
- unsigned _heaplen = 8192;
- unsigned _stklen = 4096;
- extern unsigned _psp;
-
- static void x2s(int v, char *s)
- {
- static char hex[] = "0123456789abcdef";
- int i;
-
- for (i = 0; i < 4; i++) {
- s[3 - i] = hex[v & 15];
- v >>= 4;
- }
- s[4] = 0;
- }
-
- void print_string_stdout(char *s)
- {
- _AH = 0x09;
- _DX = (unsigned) s;
- geninterrupt(0x21);
- }
-
- static int dpmi_host(void)
- { /* ret = 0 DPMI, else not */
- _AX = 0x1687;
- geninterrupt(0x2F);
- return _AX;
- }
-
- char *exe_name;
- char rsx_name[] = "RSXDJ.EXE";
- char go32_name[] = "GO32.EXE";
-
- main(int argc, char **argv)
- {
- char s_argc[5], s_seg[5], s_argv[5];
- int r;
-
- if (dpmi_host() == 0)
- exe_name = rsx_name;
- else
- exe_name = go32_name;
-
- x2s(argc, s_argc);
- x2s(_DS, s_seg);
- x2s((int) argv, s_argv);
- r = spawnlp(P_WAIT, exe_name, exe_name, "!proxy", s_argc, s_seg, s_argv, 0);
- if (r == -1) {
- print_string_stdout(exe_name);
- print_string_stdout(":file not found\r\n$");
- }
- return r;
- }
-