home *** CD-ROM | disk | FTP | other *** search
/ Groovy Bytes: Behind the Moon / groovybytes.iso / GROOVY / SND_TOOL / SWMP13.ZIP / C_SDK.ZIP / MODPLAY.INC < prev   
Encoding:
Text File  |  1995-05-16  |  3.1 KB  |  186 lines

  1. /* ╓─────────────────────────────────────────────────╖ */
  2. /* ║ SOUND WIZARDS MODULE PLAYER V1.3 BY LORD EXCESS ║ */
  3. /* ╙─────────────────────────────────────────────────╜ */
  4.  
  5. #include <stdlib.h>
  6.  
  7. #define Detection         0
  8. #define SoundBlaster      1
  9. #define SoundBlaster_Pro  2
  10. #define Gravis_UltraSound 3
  11.  
  12. unsigned int Soundcard, Channels;
  13. void *Mod_Driver;
  14. unsigned char Peak[8];
  15.  
  16. extern void far Detect_Hardware(void);
  17. extern void far Driver_SB(void);
  18. extern void far Driver_SBP(void);
  19. extern void far Driver_GUS(void);
  20.  
  21. void Mod_Close(void)
  22. {
  23.  asm {
  24.   mov     bx,1
  25.   call    DWORD PTR [Mod_Driver]
  26.  }
  27. }
  28.  
  29. void Mod_Init(unsigned int Driver, unsigned int Port, unsigned char IRQ, unsigned char DMA)
  30. {
  31.  asm {
  32.   mov     ax,[Driver]
  33.   or      ax,ax
  34.   jz      l_1
  35.   cmp     ax,Gravis_UltraSound
  36.   ja      l_Error
  37.   mov     cl,BYTE PTR [IRQ]
  38.   mov     ch,BYTE PTR [DMA]
  39.   mov     dx,[Port]
  40.   jmp     l_2
  41.  }
  42. l_1:
  43.   Detect_Hardware();
  44.  asm {
  45.   or      ax,ax
  46.   jz      l_Error
  47.   cmp     ax,Gravis_UltraSound
  48.   ja      l_Error
  49.  }
  50. l_2:
  51.  asm {
  52.   mov     [Soundcard],ax
  53.   mov     WORD PTR [Mod_Driver],0
  54.   cmp     ax,SoundBlaster
  55.   jnz     l_3
  56.   mov     WORD PTR [Mod_Driver+2],SEG Driver_SB
  57.   jmp     l_Test
  58.  }
  59. l_3:
  60.  asm {
  61.   cmp     ax,SoundBlaster_Pro
  62.   jnz     l_4
  63.   mov     WORD PTR [Mod_Driver+2],SEG Driver_SBP
  64.   jmp     l_Test
  65.  }
  66. l_4:
  67.  asm {
  68.   mov     WORD PTR [Mod_Driver+2],SEG Driver_GUS
  69.  }
  70. l_Test:
  71.  asm {
  72.   xor     bx,bx
  73.   call    DWORD PTR [Mod_Driver]
  74.   or      ax,ax
  75.   jz      l_Error
  76.  }
  77.  if (atexit(Mod_Close)) {
  78.   Mod_Close();
  79. l_Error:
  80.   asm {
  81.    mov     [Soundcard],0
  82.   }
  83.  }
  84. }
  85.  
  86. void Mod_Load(char *File_Name)
  87. {
  88.  if (Soundcard) asm {
  89.   mov     bx,2
  90.   mov     dx,[File_Name]
  91.   call    DWORD PTR [Mod_Driver]
  92.   mov     [Channels],ax
  93.  }
  94.  else Channels=0;
  95. }
  96.  
  97. void Mod_Play(unsigned int Looping)
  98. {
  99.  if (Soundcard) asm {
  100.   mov     bx,3
  101.   mov     ax,[Looping]
  102.   call    DWORD PTR [Mod_Driver]
  103.  }
  104. }
  105.  
  106. void Mod_Stop(void)
  107. {
  108.  if (Soundcard) asm {
  109.   mov     bx,4
  110.   call    DWORD PTR [Mod_Driver]
  111.  }
  112. }
  113.  
  114. void Mod_Volume(unsigned char Volume)
  115. {
  116.  if (Soundcard) asm {
  117.   mov     bx,5
  118.   mov     al,[Volume]
  119.   call    DWORD PTR [Mod_Driver]
  120.  }
  121. }
  122.  
  123. unsigned int Mod_Status(void)
  124. {
  125.  if (Soundcard) {
  126.   asm {
  127.    mov     bx,6
  128.    call    DWORD PTR [Mod_Driver]
  129.   }
  130.   return(_AX);
  131.  }
  132.  else return(0);
  133. }
  134.  
  135. unsigned int Mod_Position(void)
  136. {
  137.  if (Soundcard) {
  138.   asm {
  139.    mov     bx,7
  140.    xor     al,al
  141.    call    DWORD PTR [Mod_Driver]
  142.   }
  143.   return(_AX);
  144.  }
  145.  else return(0);
  146. }
  147.  
  148. void Mod_Rewind(void)
  149. {
  150.  if (Soundcard) asm {
  151.   mov     bx,7
  152.   mov     al,-1
  153.   call    DWORD PTR [Mod_Driver]
  154.  }
  155. }
  156.  
  157. void Mod_Forward(void)
  158. {
  159.  if (Soundcard) asm {
  160.   mov     bx,7
  161.   mov     al,1
  162.   call    DWORD PTR [Mod_Driver]
  163.  }
  164. }
  165.  
  166. void Mod_Peak(void)
  167. {
  168.  asm {
  169.   push    es
  170.   mov     ax,ds
  171.   mov     es,ax
  172.   mov     di,OFFSET Peak
  173.  }
  174.  if (Soundcard) asm {
  175.   mov     bx,8
  176.   call    DWORD PTR [Mod_Driver]
  177.  }
  178.  else asm {
  179.   cld
  180.   mov     cx,4
  181.   xor     ax,ax
  182.   rep     stosw
  183.  }
  184.   asm pop    es;
  185. }
  186.