home *** CD-ROM | disk | FTP | other *** search
/ Audio 4.94 - Over 11,000 Files / audio-11000.iso / msdos / sndbords / proaudio / funsrc / funsrc.arj / TMR.C < prev    next >
C/C++ Source or Header  |  1993-03-19  |  4KB  |  216 lines

  1. #include <stdio.h>
  2.  
  3. char *syntax= "Syntax: tmr [-bXXX] # set delay  OR  tmr [-bXXX] # on  OR  tmr [-bXXX] # off\n";
  4. char *pcmcom= "Requires that \"pcmfun.com\" be loaded.\n";
  5. char *helpem= "Set or Turn on or off one of the \"Timers\".\n";
  6. char *pcmnot= "error: pcmfun.com is not loaded.\n";
  7. char *copyright= "tmr - v(1.0) - Copyright Media Vision, Inc. 1992\n";
  8. char *programmer= "Bart Crane";
  9.  
  10. main(int argc, char **argv)
  11. {
  12.     unsigned int boardaddress= 0;
  13.  
  14.     if (argc < 3)
  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.             argc--;
  47.             }
  48.  
  49.         boardaddress<<= 4;
  50.         }
  51.  
  52.     if (!checkforsig(boardaddress))
  53.         {
  54.         fprintf(stderr, pcmnot);
  55.         return(2);
  56.         }
  57.  
  58.     if (!stricmp(argv[2], "on"))
  59.         {
  60.         int timer= 0;
  61.  
  62.         if (argc < 3)
  63.             {
  64.             fprintf(stderr, syntax);
  65.             return(1);
  66.             }
  67.  
  68.         timer= atoi(argv[1])- 1;
  69.  
  70.         _asm
  71.             {
  72.             mov ax, 4010h                    ; 01 00 0100    = ON TIMER# TIMERCONTROL
  73.             or ah, byte ptr timer[0];
  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[2], "off"))
  83.         {
  84.         int timer= 0;
  85.  
  86.         if (argc < 3)
  87.             {
  88.             fprintf(stderr, syntax);
  89.             return(1);
  90.             }
  91.  
  92.         timer= atoi(argv[1])- 1;
  93.  
  94.         _asm
  95.             {
  96.             mov ax, 0010h
  97.             or ah, byte ptr timer[0]    ;    00 00 0100    = OFF TIMER# TIMERCONTROL
  98.             push si
  99.             mov si, 8017h
  100.             or si, boardaddress
  101.             int 94h
  102.             pop si
  103.             }
  104.         }
  105.     else
  106.     if (!stricmp(argv[2], "set"))
  107.         {
  108.         int timer= 0;
  109.         long delay= 0;
  110.  
  111.         if (argc < 4)
  112.             {
  113.             fprintf(stderr, syntax);
  114.             return(1);
  115.             }
  116.  
  117.         timer= atoi(argv[1])- 1;
  118.         delay= atol(argv[3]);
  119.  
  120.         if (argc > 4)
  121.             {
  122.             if (!stricmp(argv[4], "oneshot"))
  123.                 delay|= 0x80000000;
  124.             else
  125.                 {
  126.                 fprintf(stderr, syntax);
  127.                 return(1);
  128.                 }
  129.             }
  130.  
  131.         _asm
  132.             {
  133.             mov ax, 8010h                    ; 10 00 0100    = SET TIMER# TIMERCONTROL
  134.             or ah, byte ptr timer[0]
  135.             mov cx, word ptr delay[0]
  136.             mov dx, word ptr delay[2]
  137.             push si
  138.             mov si, 8017h
  139.             or si, boardaddress
  140.             int 94h
  141.             pop si
  142.             }
  143.         }
  144.     else
  145.         {
  146.         fprintf(stderr, syntax);
  147.         return(1);
  148.         }
  149.  
  150.     return(0);
  151. }
  152.  
  153. checkforsig(int boardaddress)
  154. {
  155.     int status;
  156.     int int94isthere= 0;
  157.  
  158.     _asm
  159.         {
  160.         mov al, 94h
  161.         mov ah, 35h                    ; GETDOSVECTOR
  162.         int 21h
  163.  
  164.         mov ax, es
  165.         or ax, bx
  166.         mov int94isthere, ax
  167.  
  168.         mov bx, 107h                ; offset f_sig in segment holding int 94h
  169.  
  170.         mov ax, es:[bx][0]
  171.         xor ax, 4350h                ; 'CP'
  172.         jnz nodriver
  173.  
  174.         mov ax, es:[bx][2]
  175.         xor ax, 2D4dh                ; '-M'
  176.         jnz nodriver
  177.  
  178.         mov ax, es:[bx][4]
  179.         xor ax, 4853h                ; 'HS'
  180.         jnz nodriver
  181.  
  182.         mov ax, es:[bx][6]
  183.         xor ax, 5241h                ; 'RA'
  184.         jnz nodriver
  185.  
  186.         mov ax, es:[bx][8]
  187.         xor al, 4Bh                    ; 'K'
  188.         jnz nodriver
  189.  
  190.         cbw                            ; ax= 0
  191.  
  192.         cmp boardaddress, 0        ; board specified?
  193.         jz nodriver                
  194.  
  195.         cmp int94isthere, 0        ; 
  196.         jz nodriver
  197.         
  198.         push si
  199.         mov si, 8002h
  200.         or si, boardaddress
  201.         int 94h
  202.         pop si
  203.         or ax, ax                    ; ax= 0 if not at address, !0 if is
  204.         mov ax, 0                    ; ax= 0
  205.         jnz nodriver                ; ax= 0 if driver
  206.         dec ax                        ; ax= !0 if nodriver
  207.  
  208.         nodriver:                    
  209.  
  210.         mov status, ax                ; ax= !0 if nodriver, 0 if driver
  211.         }
  212.  
  213.     return(!status);                // status= 0 if nodriver, !0 if driver
  214. }
  215.  
  216.