First commit 09/12/1994

This commit is contained in:
2021-09-03 17:43:05 +02:00
commit 89a9bade50
18 changed files with 6079 additions and 0 deletions

156
SONIDOP.CPP Normal file
View 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;
}