home *** CD-ROM | disk | FTP | other *** search
/ Internet MPEG Audio Archive / IMAA.mdf / util / dos / l3v100n / rsx / source / stubdj.c < prev    next >
C/C++ Source or Header  |  1994-01-19  |  1KB  |  64 lines

  1. /*
  2. ** running bound DJGPP exe-files
  3. ** go32.exe without DPMI
  4. ** rsxdj.exe with DPMI
  5. */
  6.  
  7. #include <process.h>
  8. #include <dos.h>
  9.  
  10. unsigned _heaplen = 8192;
  11. unsigned _stklen = 4096;
  12. extern unsigned _psp;
  13.  
  14. static void x2s(int v, char *s)
  15. {
  16.     static char hex[] = "0123456789abcdef";
  17.     int i;
  18.  
  19.     for (i = 0; i < 4; i++) {
  20.     s[3 - i] = hex[v & 15];
  21.     v >>= 4;
  22.     }
  23.     s[4] = 0;
  24. }
  25.  
  26. void print_string_stdout(char *s)
  27. {
  28.     _AH = 0x09;
  29.     _DX = (unsigned) s;
  30.     geninterrupt(0x21);
  31. }
  32.  
  33. static int dpmi_host(void)
  34. {                /* ret = 0 DPMI, else not */
  35.     _AX = 0x1687;
  36.     geninterrupt(0x2F);
  37.     return _AX;
  38. }
  39.  
  40. char *exe_name;
  41. char rsx_name[] = "RSXDJ.EXE";
  42. char go32_name[] = "GO32.EXE";
  43.  
  44. main(int argc, char **argv)
  45. {
  46.     char s_argc[5], s_seg[5], s_argv[5];
  47.     int r;
  48.  
  49.     if (dpmi_host() == 0)
  50.     exe_name = rsx_name;
  51.     else
  52.     exe_name = go32_name;
  53.  
  54.     x2s(argc, s_argc);
  55.     x2s(_DS, s_seg);
  56.     x2s((int) argv, s_argv);
  57.     r = spawnlp(P_WAIT, exe_name, exe_name, "!proxy", s_argc, s_seg, s_argv, 0);
  58.     if (r == -1) {
  59.     print_string_stdout(exe_name);
  60.     print_string_stdout(":file not found\r\n$");
  61.     }
  62.     return r;
  63. }
  64.