First commit 09/12/1994
This commit is contained in:
156
SONIDOP.CPP
Normal file
156
SONIDOP.CPP
Normal file
@ -0,0 +1,156 @@
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// PROGRAMACION DEL CANAL DE SONIDO DE LA SOUND BLASTER //
|
||||
// //
|
||||
// por: Jos<6F> Antonio Acedo Mart<72>n-Grande, miembro de "GOLDY GAMES" //
|
||||
// //
|
||||
// TEL: (91) 6 11 72 71 (MADRID) //
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// ADAPTACION PARA CATALOGO POR Jos<6F> David Guill<6C>n //
|
||||
// JD... Fv //
|
||||
///////////////////////////// FICHEROS A INCLUIR ////////////////////////////
|
||||
|
||||
#include <dos.h>
|
||||
#include <bios.h>
|
||||
#include <stdio.h>
|
||||
#include <alloc.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
//////////////////////////////// DEFINICIONES ////////////////////////////////
|
||||
|
||||
#define INICIFX 0x17
|
||||
#define FINALFX 0x21
|
||||
#define PAUSAFX 0x19
|
||||
#define CONTIFX 0x2E
|
||||
|
||||
#define INICISOUND 6
|
||||
#define FINALSOUND 8
|
||||
#define PAUSASOUND 10
|
||||
#define CONTISOUND 11
|
||||
|
||||
#define FINDRV 9
|
||||
#define TAMSFXDRV 5000
|
||||
#define TAMVOC 70000L
|
||||
|
||||
//////////////////////// DECLARACIONES DE FUNCIONES //////////////////////////
|
||||
volatile int statusw=0; //palabra de estado del sonido FX
|
||||
char sfxdriver[TAMSFXDRV]; //debe ser 16 bytes mayor que el driver
|
||||
char *dir_sfxdriver;
|
||||
|
||||
|
||||
extern char *dir_voc;
|
||||
extern char *dir_sfx;
|
||||
extern int sb;
|
||||
|
||||
extern "C" int INICIALIZADRV(char *, volatile int *);
|
||||
|
||||
extern "C" void ELIGEFICHFX(char *);
|
||||
extern "C" void SOUNDFXDRIVER(int);
|
||||
|
||||
|
||||
int lee_ficheros(char *, char *, long);
|
||||
|
||||
int asigna_memoria(void);
|
||||
void libera_memoria(void);
|
||||
void sin_memoria(void);
|
||||
void fichero_enorme(void);
|
||||
|
||||
int Inicializa_SB(void);
|
||||
void PlaySound(int Lee);
|
||||
|
||||
|
||||
////////////////////////////////// PROGRAMA //////////////////////////////////
|
||||
|
||||
int Inicializa_SB(void)
|
||||
{
|
||||
int sonido = 1;
|
||||
|
||||
// dir_sfx=argv[1];
|
||||
if ( asigna_memoria() ) return (sonido = 0);
|
||||
|
||||
if( lee_ficheros( "CATALOG0.drv", dir_sfxdriver, TAMSFXDRV) == 0) sonido = 0;
|
||||
else {
|
||||
|
||||
if(INICIALIZADRV(dir_sfxdriver, &statusw)!=NULL) sonido = 0;
|
||||
|
||||
}
|
||||
|
||||
if (sonido == 0) farfree(dir_voc);
|
||||
|
||||
return sonido;
|
||||
|
||||
|
||||
}
|
||||
|
||||
void PlaySound(int Lee){
|
||||
|
||||
SOUNDFXDRIVER(FINALSOUND);
|
||||
|
||||
if(Lee) {
|
||||
if( lee_ficheros(dir_sfx, dir_voc, TAMVOC) == 1 )
|
||||
ELIGEFICHFX(dir_voc);
|
||||
}
|
||||
SOUNDFXDRIVER(INICISOUND);
|
||||
|
||||
|
||||
}
|
||||
|
||||
void fichero_enorme(void)
|
||||
{
|
||||
|
||||
libera_memoria();
|
||||
printf("El fichero VOC no puede ser mayor de %ld bytes.", TAMVOC);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
int asigna_memoria(void)
|
||||
{
|
||||
long dir, des_dir, seg_dir;
|
||||
|
||||
if((dir_voc =(char *)farmalloc (80000L))==NULL) return 1;
|
||||
|
||||
|
||||
dir_sfxdriver=sfxdriver;
|
||||
dir=(long)dir_sfxdriver;
|
||||
des_dir=dir & 0x0000FFFF;
|
||||
seg_dir=dir & 0xFFFF0000;
|
||||
des_dir=(des_dir+16) >> 4;
|
||||
(long)dir_sfxdriver=seg_dir+(des_dir << 16);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void libera_memoria(void)
|
||||
{
|
||||
farfree(dir_voc);
|
||||
}
|
||||
|
||||
void sin_memoria(void)
|
||||
{
|
||||
|
||||
libera_memoria();
|
||||
printf("No hay suficiente memoria. Libere programas residentes.");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
int lee_ficheros(char *file, char *dir_carga, long tam_fichero)
|
||||
{
|
||||
FILE *handle_sonido;
|
||||
char *p;
|
||||
long tam=0;
|
||||
|
||||
if((handle_sonido = fopen(file, "rb"))==NULL) {
|
||||
if(file=="CATALOG0.drv") { sb = 0; return 0; }
|
||||
if(file==dir_sfx) return 0;
|
||||
return 0;
|
||||
}
|
||||
p=dir_carga;
|
||||
while(!feof(handle_sonido)) {
|
||||
*p=getc(handle_sonido);
|
||||
(long)p++; tam++;
|
||||
if(tam > tam_fichero) fichero_enorme();
|
||||
}
|
||||
fclose(handle_sonido);
|
||||
return 1;
|
||||
}
|
||||
|
Reference in New Issue
Block a user