CD_OUT_SRC/CD_OUT.CPP
2021-09-03 17:50:32 +02:00

413 lines
19 KiB
C++
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

///////////////////////////// FICHEROS A INCLUIR /////////////////////////////
#include <dos.h>
#include <conio.h>
#include <alloc.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <graphics.h>
#include "CD_SND.H"
//extern unsigned _stklen = 16000U;
#include "XmsSupp.h"
#include "cd_icons.h"
#include "cd_error.h"
#include "c:\program\src_dos\libs\make_bot\make_bot.h"
#include "c:\program\src_dos\libs\wavplav\wavplay.h"
extern int /*far _cdecl*/ Fichero_cd_img(char Dinamicos_Estaticos);
extern int far _Cdecl Svga256_fdriver[];
int huge DetectVGA256(){ return 2; }
int Load_Snd(void);
extern void Menu_de_Edicion(void);
extern void Inicializa_Iconos(void);
extern Abre_Ficha_CD_CFG(int R_W);
extern void Coloca_Iconos(int Start_Icon);
extern void Coloca_Iconos_Dos_Windows(void);
extern void Inicializa_Dibujo(int L_Imagen, char *N_Imagen2);
extern char far *Icono;
void InicializaSVGA(void);
extern char dac[256*3];
extern "C" void APAGA_PANTALLA(char *);
extern "C" void ENCIENDE_PANTALLA(char *);
extern char far *dir_vga;
extern "C" void CHANGE_BANK(int);
char _XMS = 1;
// int Raton_o_Tecla(void);
void Sonido( char Sonido );
typedef struct {
unsigned int Exit_after_EXE : 1;
unsigned int With_Out_Sound : 1;
unsigned int Auto_Install : 1;
unsigned int Check_Free_Size : 1;
unsigned int Format_Always : 1;
unsigned int Without_Backgr : 1;
unsigned int Futura_Ampliac : 4;
} Cd_CFG;
extern Cd_CFG CD_CFG1;
char _VerImagen = 1;
XmsSupp Xms_Image_Bank1,
Xms_Image_Bank2,
Xms_Image_Bank3,
Xms_Image_Bank4,
Xms_Image_Bank5;
typedef struct
{
char Nombre_del_Programa[70];
char Comentario_Inicial[70];
char VerHi, VerLow;
char Register;
long Records;
} CABECERA;
typedef struct
{
char Wave_Name[13]; // Nombre del Wave
char ID_code; // Codigo ID_ del Wave
unsigned long Pos; // Posici¢n de comienzo dentro del archivo destino
unsigned long Len; // Longitud
} CD_SND;
CD_SND CD_Snd[19];
int main(int argc, char *argv[]){
// /*Û*/ if( Fichero_cd_img(0) /*Û*/
// /*Û*/ == SIN_MEMORIA ) { // "botones.p1" /*Û*/
// /*Û*/ closegraph(); /*Û*/
// /*Û*/ cprintf("\n\rError en la CARGA DE BOTONES"); /*Û*/
// /*Û*/ exit(112); /*Û*/
// /*Û*/ } /*Û*/
// despliega_datos();
// getch();
// return 21;
int L_Imagen = -1;
char *N_Imagen2;
// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
// Û Carga de los argumentos Û
//ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ//
/*Û*/ /*Û*/
/*Û*/ for(int i=1; i<=argc; i++) /*Û*/
/*Û*/ { /*Û*/
/*Û*/ if( strcmp( argv[i], "-0") == 0 ) L_Imagen=0; else /*Û*/
/*Û*/ if( strcmp( argv[i], "-1") == 0 ) L_Imagen=1; else /*Û*/
/*Û*/ if( strcmp( argv[i], "-2") == 0 ) L_Imagen=2; else /*Û*/
/*Û*/ if( strcmp( argv[i], "-3") == 0 ) L_Imagen=3; else /*Û*/
/*Û*/ if( strcmp( argv[i], "-4") == 0 ) L_Imagen=4; else /*Û*/
/*Û*/ if( strcmp( argv[i], "-5") == 0 ) L_Imagen=5; else /*Û*/
/*Û*/ if( strcmp( argv[i], "-6") == 0 ) L_Imagen=6; else /*Û*/
/*Û*/ if( strcmp( argv[i], "-7") == 0 ) L_Imagen=7; else /*Û*/
/*Û*/ if( strcmp( argv[i], "-8") == 0 ) L_Imagen=8; else /*Û*/
/*Û*/ if( strcmp( argv[i], "-9") == 0 ) L_Imagen=9; else /*Û*/
/*Û*/ if( strncmpi( argv[i], "-N:", 3) == 0 ) { L_Imagen=-2; /*Û*/
/*Û*/ N_Imagen2 = argv[i]; /*Û*/
/*Û*/ N_Imagen2 += 3; /*Û*/
/*Û*/ } else /*Û*/
/*Û*/ if( strcmp( argv[i], "-NO_XMS") == 0 ) _VerImagen = 0; /*Û*/
/*Û*/ if( strcmp( argv[i], "-NO_SND") == 0 ) CD_CFG1.With_Out_Sound=1;/*Û*/
/*Û*/ } /*Û*/
/*Û*/ /*Û*/
//ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ//
// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
// Û Carga la Configuraci¢n Û
//ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ//
/*Û*/ /*Û*/
/*Û*/ clrscr(); /*Û*/
/*Û*/ cprintf("JD & CD_OUT\r\n\r\n"); /*Û*/
/*Û*/ cprintf("Cargando fichero de Configuraci¢n. "); /*Û*/
/*Û*/ Abre_Ficha_CD_CFG(0); /*Û*/
/*Û*/ cprintf(" --> Ok!\n\r"); /*Û*/
/*Û*/ /*Û*/
//ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ//
// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
// Û Inicializaci¢n Sonidos Û
//ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ//
/*Û*/ if ( !CD_CFG1.With_Out_Sound ) /*Û*/
/*Û*/ { /*Û*/
/*Û*/cprintf("Inicializando sonidos. "); /*Û*/
/*Û*/ switch ( InitSB() ) { /*Û*/
/*Û*/ case 0: /*Û*/
/*Û*/ cprintf(" --> Speaker Ok!\n\r"); /*Û*/
/*Û*/ break; /*Û*/
/*Û*/ case 1: /*Û*/
/*Û*/ cprintf(" --> Sound Blaster Ok!\n\r"); /*Û*/
/*Û*/ break; /*Û*/
/*Û*/ case 2: /*Û*/
/*Û*/ cprintf(" --> Dac Casero Ok!\n\r"); /*Û*/
/*Û*/ break; /*Û*/
/*Û*/ } /*Û*/
/*Û*/ } else cprintf(" --> Sin Sonidos Ok!\n\r"); /*Û*/
/*Û*/ /*Û*/
/*Û*/cprintf("Cargando estructura de sonidos. "); /*Û*/
/*Û*/if( !Load_Snd() ) /*Û*/
/*Û*/{ /*Û*/
/*Û*/ CD_CFG1.With_Out_Sound = 0; /*Û*/
/*Û*/ cprintf(" --> ERROR EN LA CARGA DE SONIDOS!\n\r"); /*Û*/
/*Û*/} else { /*Û*/
/*Û*/ cprintf(" --> Ok!\n\r"); /*Û*/
/*Û*/} /*Û*/
/*Û*/ /*Û*/
/*Û*/ /*Û*/
/*Û*/ /*Û*/
//ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ//
// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
// Û Inicializaci¢n de la XMS Û
//ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ//
/*Û*/ /*Û*/
/*Û*/ cprintf("Inicializando XMS... \n\r"); /*Û*/
/*Û*/ /*Û*/
/*Û*/ // Errores en Inicializacion XMS. /*Û*/
/*Û*/ /*Û*/
/*Û*/ Xms_Image_Bank1.lError=0; /*Û*/
/*Û*/ Xms_Image_Bank2.lError=0; /*Û*/
/*Û*/ Xms_Image_Bank3.lError=0; /*Û*/
/*Û*/ Xms_Image_Bank4.lError=0; /*Û*/
/*Û*/ Xms_Image_Bank5.lError=0; /*Û*/
/*Û*/ /*Û*/
/*Û*/ InitXms(&Xms_Image_Bank1); /*Û*/
/*Û*/ InitXms(&Xms_Image_Bank2); /*Û*/
/*Û*/ InitXms(&Xms_Image_Bank3); /*Û*/
/*Û*/ InitXms(&Xms_Image_Bank4); /*Û*/
/*Û*/ InitXms(&Xms_Image_Bank5); /*Û*/
/*Û*/ /*Û*/
/*Û*/ GetInfo(&Xms_Image_Bank1); // Informe de estado. /*Û*/
/*Û*/ if(Xms_Image_Bank1.lError || Xms_Image_Bank2.lError || /*Û*/
/*Û*/ Xms_Image_Bank3.lError || Xms_Image_Bank4.lError || /*Û*/
/*Û*/ Xms_Image_Bank5.lError )/*Û*/
/*Û*/ /*Û*/
/*Û*/ { /*Û*/
/*Û*/ printf("Bank1 %s\n",Xms_Image_Bank1.cError); /*Û*/
/*Û*/ printf("Bank2 %s\n",Xms_Image_Bank2.cError); /*Û*/
/*Û*/ printf("Bank3 %s\n",Xms_Image_Bank3.cError); /*Û*/
/*Û*/ printf("Bank4 %s\n",Xms_Image_Bank4.cError); /*Û*/
/*Û*/ printf("Bank5 %s\n",Xms_Image_Bank5.cError); /*Û*/
/*Û*/ _XMS = 0; /*Û*/
/*Û*/ } /*Û*/
/*Û*/ // Reservamos 64K * 5 bancos. Si hay Error lo Visualizamos. /*Û*/
/*Û*/ AllocXms( 64, &Xms_Image_Bank1); /*Û*/
/*Û*/ AllocXms( 64, &Xms_Image_Bank2); /*Û*/
/*Û*/ AllocXms( 64, &Xms_Image_Bank3); /*Û*/
/*Û*/ AllocXms( 64, &Xms_Image_Bank4); /*Û*/
/*Û*/ AllocXms( 64, &Xms_Image_Bank5); /*Û*/
/*Û*/ if(Xms_Image_Bank1.lError || Xms_Image_Bank2.lError || /*Û*/
/*Û*/ Xms_Image_Bank3.lError || Xms_Image_Bank4.lError || /*Û*/
/*Û*/ Xms_Image_Bank5.lError )/*Û*/
/*Û*/ /*Û*/
/*Û*/ { /*Û*/
/*Û*/ printf("Bank1 %s\n",Xms_Image_Bank1.cError); /*Û*/
/*Û*/ printf("Bank2 %s\n",Xms_Image_Bank2.cError); /*Û*/
/*Û*/ printf("Bank3 %s\n",Xms_Image_Bank3.cError); /*Û*/
/*Û*/ printf("Bank4 %s\n",Xms_Image_Bank4.cError); /*Û*/
/*Û*/ printf("Bank5 %s\n",Xms_Image_Bank5.cError); /*Û*/
/*Û*/ _XMS = 0; /*Û*/
/*Û*/ /*Û*/
/*Û*/ } /*Û*/
//ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ//
// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
// Û Inicializaci¢n Pantalla Û
//ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ//
/*Û*/ /*Û*/
/*Û*/ InicializaSVGA(); /*Û*/
///*Û*/ APAGA_PANTALLA(dac); /*Û*/
/*Û*/ memset( dac, 0, 256*3 ); /*Û*/
unsigned Segt = FP_SEG(dac), Off = FP_OFF(dac);
/*Û*/ asm mov ax, 0x1012 ; /*Û*/
/*Û*/ asm mov bx, 0 ; /*Û*/
/*Û*/ asm mov cx, 256 ; /*Û*/
/*Û*/ asm mov es, Segt ; /*Û*/
/*Û*/ asm mov dx, Off ; /*Û*/
/*Û*/ asm int 0x10 ; /*Û*/
/*Û*/ /*Û*/
/*Û*/ if( CD_CFG1.Without_Backgr != 1 ) /*Û*/
/*Û*/ Inicializa_Dibujo( L_Imagen, N_Imagen2 ); /*Û*/
/*Û*/ /*Û*/
/*Û*///if( carga_botones("cd_out.img") // Carga botones del fichero/*Û*/
/*Û*/ if( Fichero_cd_img(0) /*Û*/
/*Û*/ != 1 ) { // "botones.p1" /*Û*/
/*Û*/ closegraph(); /*Û*/
/*Û*/ cprintf("\n\rError en la CARGA DE BOTONES"); /*Û*/
/*Û*/ exit(112); /*Û*/
/*Û*/ } /*Û*/
/*Û*/ /*Û*/
/*Û*///Imprime_Estaticos( 1, "cd_out.img"); // Imprime botones estaticos/*Û*/
/*Û*/ Fichero_cd_img(1); /*Û*/
/*Û*/ // 'Seccion 1' /*Û*/
/*Û*/ Imprime_Secuencia(1); // Imprime secuencia 1. /*Û*/
/*Û*/ /*Û*/
/*Û*///Imprime_Estaticos( 2, "cd_out.img"); // Imprime botones estaticos/*Û*/
/*Û*/ Fichero_cd_img(2); /*Û*/
/*Û*/ // 'Seccion 2' para los textosÛ*/
/*Û*/ PunteroRaton = 100; /*Û*/
/*Û*/ inicializa_raton_grafico( 0, 0, 618, 460); /*Û*/
/*Û*/ if ( PunteroRaton != 100 ) { /*Û*/
/*Û*/ closegraph(); /*Û*/
/*Û*/ cprintf("Memoria_Insuficiente para el RATON\n\r");/*Û*/
/*Û*/ exit(1); /*Û*/
/*Û*/ } /*Û*/
/*Û*/ /*Û*/
/*Û*/ Inicializa_Iconos(); /*Û*/
/*Û*/ Coloca_Iconos_Dos_Windows(); /*Û*/
/*Û*/ Coloca_Iconos(1); /*Û*/
/*Û*/ /*Û*/
/*Û*/ ENCIENDE_PANTALLA(dac); /*Û*/
/*Û*/ /*Û*/
/*Û*/ True_Push = ON; // Activa el TRUE PUSH ( PRESION REAL )/*Û*/
/*Û*/ /*Û*/
//ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ//
// Sonido("CD_OUT00.WAV");
Sonido( Start_Program );
Menu_de_Edicion();
// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
// ± Liberacion miscelanea ±
//±ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß±//
/*±*/ Libera_Raton_Animado(); /*±*/
/*±*/ /*±*/
/*±*/ APAGA_PANTALLA(dac); /*±*/
/*±*/ closegraph(); /*±*/
/*±*/ farfree(Icono); /*±*/
/*±*/ /*±*/
/*±*/// Sonido("CD_OUTFF.WAV"); /*±*/
/*±*/ Sonido( End_Program ); /*±*/
/*±*/ DeInitSB(); /*±*/
//±ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜܱ//
// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
// ± Liberacion de la XMS ±
//±ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß±//
/*±*/ // Liberamos XMS si hay ERROR lo Visualizamos. /*±*/
/*±*/ FreeXms(&Xms_Image_Bank1); /*±*/
/*±*/ FreeXms(&Xms_Image_Bank2); /*±*/
/*±*/ FreeXms(&Xms_Image_Bank3); /*±*/
/*±*/ FreeXms(&Xms_Image_Bank4); /*±*/
/*±*/ FreeXms(&Xms_Image_Bank5); /*±*/
/*Û*/ if(Xms_Image_Bank1.lError || Xms_Image_Bank2.lError ||
Xms_Image_Bank3.lError || Xms_Image_Bank4.lError ||
Xms_Image_Bank5.lError )/*Û*/
/*Û*/ /*Û*/
/*Û*/ { /*Û*/
/*Û*/ printf("Bank1 %s\n",Xms_Image_Bank1.cError); /*Û*/
/*Û*/ printf("Bank2 %s\n",Xms_Image_Bank2.cError); /*Û*/
/*Û*/ printf("Bank3 %s\n",Xms_Image_Bank3.cError); /*Û*/
/*Û*/ printf("Bank4 %s\n",Xms_Image_Bank4.cError); /*Û*/
/*Û*/ printf("Bank5 %s\n",Xms_Image_Bank5.cError); /*Û*/
/*Û*/ _XMS = 0; /*Û*/
/*Û*/ } /*Û*/
/*±*/ /*±*/
//±ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜܱ//
cprintf("Programa registrado a: [ SEGUEL ], n§ reg. 034-002\n\r");
cprintf("\n\r");
cprintf("Gracias por utilizar mi Software\n\r");
cprintf(" Jos David Guilln\n\r");
cprintf(" (versi¢n gratuita en: http:\\\\www.arrakis.es\\~infomundo\\JD\n\r");
cprintf("\n\r");
cprintf("­­­ El autor de este programa no se hace responsable de la utilizaci¢n\n\r");
cprintf(" del mismo, para la catalogaci¢n de CD's con contenido pirata. !!!\n\r");
cprintf("\n\r");
return 0;
}
void InicializaSVGA(void) {
int Gd = DETECT, Gm;
int Drv, errorcode;
installuserdriver("Svga256",DetectVGA256);
/* If driver is linked with file, remove comments */
registerfarbgidriver(Svga256_fdriver);
errorcode = registerfarbgifont(small_font_far);
/* report any registration errors */
if (errorcode < 0)
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1); /* terminate with an error code */
}
initgraph(&Gd,&Gm,"");
/* read result of initialization */
errorcode = graphresult();
if (errorcode != grOk) /* an error occurred */
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Presione una tecla para finalizar:");
getch();
exit(1); /* return with error code */
}
}
void Sonido(char Sonido){
if ( !CD_CFG1.With_Out_Sound && Sonido != -1 && Sonido < 19 )
{
while( kbhit() ) getch();
if ( PlayWav((char far *)"CD_OUT.SND", CD_Snd[Sonido].Pos, CD_Snd[Sonido].Len ) == -1 )
PlayLongWav((char far *)"CD_OUT.SND", CD_Snd[Sonido].Pos, CD_Snd[Sonido].Len );
while( kbhit() ) getch();
}
}
int Load_Snd(void)
{
CABECERA Cabecera;
FILE *DESTINO;
if ( ( DESTINO = fopen( "CD_OUT.SND", "rb") ) == NULL )
{
return 0;
}
fread( &Cabecera, sizeof( Cabecera ), 1, DESTINO );
fread( CD_Snd, sizeof( CD_SND ), 19, DESTINO );
fclose(DESTINO);
return 1;
}