home *** CD-ROM | disk | FTP | other *** search
/ Audio 4.94 - Over 11,000 Files / audio-11000.iso / msdos / sndbords / proaudio / funsrc / noact.c < prev    next >
C/C++ Source or Header  |  1993-03-16  |  3KB  |  166 lines

  1. #include <stdio.h>
  2.  
  3. char *syntax= "Syntax: noact [-bXXX] on delay  OR  noact [-bXXX] off\n";
  4. char *pcmcom= "Requires that \"pcmfun.com\" be loaded.\n";
  5. char *helpem= "Turn on or off the \"No Activity\" feature.\n";
  6. char *pcmnot= "error: pcmfun.com is not loaded.\n";
  7. char *copyright= "noact - v(1.0) - Copyright Media Vision, Inc. 1992\n";
  8. char *programmer= "Bart Crane";
  9.  
  10. main(int argc, char **argv)
  11. {
  12.     int boardaddress= 0;
  13.  
  14.     if (argc < 2)
  15.         {
  16.         fprintf(stderr, syntax);
  17.         fprintf(stderr, pcmcom);
  18.         fprintf(stderr, helpem);
  19.         return(1);
  20.         }
  21.  
  22.     if (argv[1][0] == '-' && argv[1][1] == 'b')
  23.         {
  24.         char *b= &argv[1][2];
  25.  
  26.         while (isxdigit(*b))
  27.             {
  28.             boardaddress*= 16;
  29.             if (*b >= '0' && *b <= '9') boardaddress+= *b- '0';
  30.             else
  31.             if (*b >= 'A' && *b <= 'F') boardaddress+= *b- 'A'+ 10;
  32.             else
  33.             if (*b >= 'a' && *b <= 'f') boardaddress+= *b- 'a'+ 10;
  34.             b++;
  35.             }
  36.  
  37.             {
  38.             int i= 1;
  39.  
  40.             while (i < argc- 1)
  41.                 {
  42.                 argv[i]= argv[i+ 1];
  43.                 i++;
  44.                 }
  45.             argv[i]= NULL;
  46.             }
  47.  
  48.         boardaddress<<= 4;
  49.         }
  50.  
  51.     if (!checkforsig(boardaddress))
  52.         {
  53.         fprintf(stderr, pcmnot);
  54.         return(2);
  55.         }
  56.  
  57.     if (!stricmp(argv[1], "on"))
  58.         {
  59.         long delay= 0;
  60.  
  61.         if (argc < 3)
  62.             {
  63.             fprintf(stderr, syntax);
  64.             return(1);
  65.             }
  66.  
  67.         delay= atol(argv[2]);
  68.  
  69.         _asm
  70.             {
  71.             mov ax, 0108h
  72.             mov cx, word ptr delay[0]
  73.             mov dx, word ptr delay[2]
  74.             push si
  75.             mov si, 8017h
  76.             or si, boardaddress
  77.             int 94h
  78.             pop si
  79.             }
  80.         }
  81.     else
  82.     if (!stricmp(argv[1], "off"))
  83.         {
  84.         _asm
  85.             {
  86.             mov ax, 0008h
  87.             push si
  88.             mov si, 8017h
  89.             or si, boardaddress
  90.             int 94h
  91.             pop si
  92.             }
  93.         }
  94.     else
  95.         {
  96.         fprintf(stderr, syntax);
  97.         return(1);
  98.         }
  99.  
  100.     return(0);
  101. }
  102.  
  103. checkforsig(int boardaddress)
  104. {
  105.     int status;
  106.     int int94isthere= 0;
  107.  
  108.     _asm
  109.         {
  110.         mov al, 94h
  111.         mov ah, 35h                    ; GETDOSVECTOR
  112.         int 21h
  113.  
  114.         mov ax, es
  115.         or ax, bx
  116.         mov int94isthere, ax
  117.  
  118.         mov bx, 107h                ; offset f_sig in segment holding int 94h
  119.  
  120.         mov ax, es:[bx][0]
  121.         xor ax, 4350h                ; 'CP'
  122.         jnz nodriver
  123.  
  124.         mov ax, es:[bx][2]
  125.         xor ax, 2D4dh                ; '-M'
  126.         jnz nodriver
  127.  
  128.         mov ax, es:[bx][4]
  129.         xor ax, 4853h                ; 'HS'
  130.         jnz nodriver
  131.  
  132.         mov ax, es:[bx][6]
  133.         xor ax, 5241h                ; 'RA'
  134.         jnz nodriver
  135.  
  136.         mov ax, es:[bx][8]
  137.         xor al, 4Bh                    ; 'K'
  138.         jnz nodriver
  139.  
  140.         cbw                            ; ax= 0
  141.  
  142.         cmp boardaddress, 0        ; board specified?
  143.         jz nodriver                
  144.  
  145.         cmp int94isthere, 0        ; 
  146.         jz nodriver
  147.         
  148.         push si
  149.         mov si, 8002h
  150.         or si, boardaddress
  151.         int 94h
  152.         pop si
  153.         or ax, ax                    ; ax= 0 if not at address, !0 if is
  154.         mov ax, 0                    ; ax= 0
  155.         jnz nodriver                ; ax= 0 if driver
  156.         dec ax                        ; ax= !0 if nodriver
  157.  
  158.         nodriver:                    
  159.  
  160.         mov status, ax                ; ax= !0 if nodriver, 0 if driver
  161.         }
  162.  
  163.     return(!status);                // status= 0 if nodriver, !0 if driver
  164. }
  165.  
  166.