home *** CD-ROM | disk | FTP | other *** search
/ Black Box 4 / BlackBox.cdr / archiver / peek_221.arj / XMTASK2.C < prev    next >
C/C++ Source or Header  |  1992-02-07  |  2KB  |  128 lines

  1. /**********************************************************/
  2. /* Try to find out if we're running under a multitasker   */
  3. /**********************************************************/
  4.  
  5. #include "peeker.h"
  6.  
  7. static union REGS rg;
  8.  
  9. static int pascal is_dv (void);
  10. static int pascal is_ddos (void);
  11. static int pascal is_mos (void);
  12. static int pascal is_tv (void);
  13. static int pascal is_os2 (void);
  14.  
  15. extern void    pascal pause_dv (void);
  16. extern void    pascal pause_ddos (void);
  17. extern void    pascal pause_tv (void);
  18. extern void    pascal pause_mos (void);
  19. extern void    pascal pause_os2 (void);
  20. extern void    pascal pause_dos (void);
  21.  
  22. void pascal (*pause_mtask)(void) = pause_dos;
  23.  
  24.  
  25. void pascal 
  26. set_mtask (void)
  27. {
  28.  
  29.   if (is_dv ()) {
  30.     pause_mtask = pause_dv;
  31.   }
  32.   else if (is_ddos ()) {
  33.     pause_mtask = pause_ddos;
  34.   }
  35.   else if (is_mos ()) {
  36.     pause_mtask = pause_mos;
  37.   }
  38.   else if (is_tv ()) {
  39.     pause_mtask = pause_tv;
  40.   }
  41.   else if (is_os2 ()) {
  42.     pause_mtask = pause_os2;
  43.   }
  44. }
  45.  
  46.  
  47. static int pascal 
  48. is_dv (void)
  49. {
  50.  
  51.   rg.x.cx = 0x4445;
  52.   rg.x.dx = 0x5351;
  53.   rg.x.ax = 0x2b01;
  54.   int86 (0x21, &rg, &rg);
  55.   return rg.h.al != 0xff;
  56.  
  57. /*
  58.   rg.h.al = 2;
  59.   int86(0x21,&rg,&rg);
  60.   if(rg.h.al != 0xff) {
  61.     dvshadow = rg.x.dx;
  62.     maxy = rg.h.bh;
  63.     maxx = rg.h.bl;
  64.   }
  65. */
  66.  
  67. }
  68.  
  69.  
  70. static int pascal 
  71. is_ddos (void)
  72. {
  73.  
  74.   rg.h.ah = 0xe4;
  75.   int86 (0x21, &rg, &rg);
  76.   if (rg.h.al == 1 || rg.h.al == 2)
  77.     return 1;
  78.   return 0;
  79. }
  80.  
  81.  
  82. static int pascal 
  83. is_mos (void)
  84. {
  85.  
  86.   int             temp;
  87.  
  88.   rg.h.ah = 0x30;
  89.   int86 (0x21, &rg, &rg);
  90.   temp = rg.x.ax;
  91.   rg.x.ax = 0x3000;
  92.   rg.x.bx = 0x3000;
  93.   rg.x.cx = 0x3000;
  94.   rg.x.dx = 0x3000;
  95.   int86 (0x21, &rg, &rg);
  96.   if (rg.x.ax == temp)
  97.     return temp;
  98.   return 0;
  99. }
  100.  
  101.  
  102. static int pascal 
  103. is_tv (void)
  104. {
  105.  
  106.   rg.x.ax = 0x1022;
  107.   rg.x.bx = 0;
  108.   int86 (0x15, &rg, &rg);
  109.   if (!rg.x.bx)
  110.     return 0;
  111.   return rg.x.bx;
  112. }
  113.  
  114.  
  115. static int pascal 
  116. is_os2 (void)
  117. {
  118.  
  119.   struct SREGS sg;
  120.  
  121.   rg.x.ax = 0x352f;
  122.   int86x(0x21,&rg,&rg,&sg);
  123.   if(!(rg.x.bx | sg.es)) return 0;
  124.   rg.x.ax = 0x1600;
  125.   int86 (0x2f, &rg, &rg);
  126.   return (rg.h.al == 0);
  127. }
  128.