333 lines
8.3 KiB
C
333 lines
8.3 KiB
C
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <process.h>
|
|
|
|
#include "f:\projet\lib386\lib_sys\adeline.h"
|
|
#include "f:\projet\lib386\lib_sys\lib_sys.h"
|
|
|
|
#include "f:\projet\lib386\lib_midi\lib_midi.h"
|
|
#include "f:\projet\lib386\lib_samp\lib_wave.h"
|
|
#include "f:\projet\lib386\lib_mix\lib_mix.h"
|
|
#include "f:\projet\lib386\lib_svga\lib_svga.h"
|
|
|
|
|
|
char Driver[_MAX_PATH] ;
|
|
|
|
// timer proc for ail_lib
|
|
|
|
HTIMER HandleTimer ;
|
|
|
|
void NewProc08() ; // dans timer.asm
|
|
|
|
extern UBYTE VESA_Error ;
|
|
|
|
char PathConfigFile[_MAX_PATH] ;
|
|
|
|
char *Adeline="ADELINE" ;
|
|
|
|
char MidiFM = 1 ;
|
|
|
|
/*══════════════════════════════════════════════════════════════════════════*
|
|
█▀▀▀▀ █▀▀▀█ ██▄ █ █▀▀▀▀ █ █▀▀▀▀
|
|
██ ██ █ ██▀██ ██▀▀ ██ ██ ▀█
|
|
▀▀▀▀▀ ▀▀▀▀▀ ▀▀ ▀ ▀▀ ▀▀ ▀▀▀▀▀
|
|
*══════════════════════════════════════════════════════════════════════════*/
|
|
/*──────────────────────────────────────────────────────────────────────────*/
|
|
|
|
WORD GiveIndexTab( UBYTE **tab, UBYTE *identificateur )
|
|
{
|
|
UBYTE **ptr ;
|
|
WORD i = 0 ;
|
|
|
|
while( *tab[0] != 0 )
|
|
{
|
|
if( !stricmp( *tab, identificateur ) )
|
|
{
|
|
return i ;
|
|
}
|
|
tab++ ;
|
|
i++ ;
|
|
}
|
|
return -1 ;
|
|
}
|
|
|
|
/*══════════════════════════════════════════════════════════════════════════*/
|
|
|
|
void InitAdelineSystem( char *name, LONG inits )
|
|
{
|
|
char **ptridentifier ;
|
|
LONG *ptrvar ;
|
|
char *ptr, *midiptr=NULL ;
|
|
char *defname ;
|
|
char *rien="" ;
|
|
|
|
printf( "\nCopyright (c) Adeline Software International 1994, All Rights Reserved.\n\n" );
|
|
|
|
*PathConfigFile = 0 ;
|
|
|
|
if (!inits) return ;
|
|
|
|
if (inits & INIT_VESA)
|
|
inits |= INIT_SVGA ;
|
|
|
|
defname = getenv(Adeline) ;
|
|
|
|
if ((inits & ~(INIT_MCGA | INIT_VESA | INIT_SVGA)) OR (inits == INIT_SVGA))
|
|
{
|
|
if(!*name)
|
|
{
|
|
printf("Error: Empty configuration filename. Go kill the programmer! (Tell him to talk to Serge as well...)\n\n");
|
|
exit(1);
|
|
}
|
|
if(!FileSize( defname ))
|
|
{
|
|
if (defname)
|
|
{
|
|
printf( "Warning: Cannot find configuration file %s as defined in the environment.\n", defname) ;
|
|
printf( " Using local configuration file %s.\n\n", name ) ;
|
|
}
|
|
if(!FileSize( name ))
|
|
{
|
|
printf( "Error: Cannot find configuration file %s.\n\n", name ) ;
|
|
exit( 1 ) ;
|
|
}
|
|
}
|
|
else
|
|
name = defname ;
|
|
|
|
printf("Please wait, loading drivers using %s...\n\n", name );
|
|
}
|
|
else
|
|
{
|
|
if(FileSize( defname ))
|
|
name = defname ;
|
|
}
|
|
|
|
strcpy(PathConfigFile, name);
|
|
|
|
//··········································································
|
|
// midi device
|
|
|
|
|
|
if(inits & INIT_MIDI)
|
|
{
|
|
printf("Initialising Midi device. Please wait...\n\n");
|
|
|
|
midiptr = Def_ReadString( name, "MidiExec" ) ;
|
|
if( midiptr )
|
|
if ((*midiptr!=0) AND stricmp(midiptr, "NoExec"))
|
|
{
|
|
spawnl(P_WAIT, midiptr, midiptr, NULL);
|
|
printf("\n");
|
|
}
|
|
|
|
ptr = Def_ReadString( name, "MidiDriver" ) ;
|
|
if( !ptr )
|
|
{
|
|
printf( "Warning %s: 'MidiDriver' missing\n", name ) ;
|
|
ptr = rien ;
|
|
}
|
|
|
|
if (stricmp(ptr, "NoMidi"))
|
|
strcpy( Driver, ptr ) ;
|
|
else
|
|
Driver[0]=0 ;
|
|
|
|
if( Driver[0] != 0 ) /* si driver midi */
|
|
{
|
|
|
|
if( !InitMidiDLL( Driver ) ) exit( 1 ) ;
|
|
|
|
AskMidiVars( &ptridentifier, &ptrvar ) ;
|
|
|
|
while( **ptridentifier )
|
|
{
|
|
if (!Def_ReadValue2( name, *ptridentifier, ptrvar++ ))
|
|
{
|
|
printf( "Error %s: '%s' missing\n", name, *ptridentifier ) ;
|
|
exit( 1 ) ;
|
|
}
|
|
|
|
ptridentifier++ ;
|
|
}
|
|
|
|
if( !InitMidi() ) exit( 1 ) ;
|
|
}
|
|
|
|
ptr = Def_ReadString( name, "MidiType" ) ;
|
|
if( !ptr )
|
|
{
|
|
printf( "Warning %s: 'MidiType' missing\n", name ) ;
|
|
ptr = rien ;
|
|
}
|
|
|
|
if (*ptr) MidiFM = !stricmp(ptr, "FM") ;
|
|
}
|
|
|
|
//··········································································
|
|
// svga device
|
|
|
|
if(inits & INIT_SVGA)
|
|
{
|
|
printf("Initialising SVGA device. Please wait...\n\n");
|
|
|
|
if(!(inits & INIT_VESA))
|
|
{
|
|
ptr = Def_ReadString( name, "SvgaDriver" ) ;
|
|
if( !ptr )
|
|
{
|
|
printf( "Warning %s: 'SvgaDriver' missing\n", name ) ;
|
|
ptr = rien ;
|
|
}
|
|
|
|
if ((stricmp( ptr, "VESA" )) AND (*ptr) )
|
|
{
|
|
strcpy( Driver, ptr ) ;
|
|
if( !SvgaInitDLL( Driver ) ) exit( 1 ) ;
|
|
}
|
|
else
|
|
printf( "Built-in VESA Super VGA Driver\n\n" ) ;
|
|
|
|
}
|
|
}
|
|
else if (inits & INIT_MCGA)
|
|
printf( "Built-in MCGA Driver\n\n" ) ;
|
|
|
|
//··········································································
|
|
// mixer device
|
|
|
|
if(inits & INIT_MIXER)
|
|
{
|
|
printf("Initialising Mixer device. Please wait...\n\n");
|
|
|
|
ptr = Def_ReadString( name, "MixerDriver" ) ;
|
|
if( !ptr )
|
|
{
|
|
printf( "Warning %s: 'MixerDriver' missing\n", name ) ;
|
|
ptr = rien ;
|
|
}
|
|
|
|
if (stricmp(ptr, "NoMixer"))
|
|
strcpy( Driver, ptr ) ;
|
|
else
|
|
Driver[0]=0 ;
|
|
|
|
if( Driver[0] != 0 ) /* si driver wave */
|
|
{
|
|
|
|
if( !MixerInitDLL( Driver ) ) exit( 1 ) ;
|
|
|
|
MixerAskVars( &ptridentifier, &ptrvar ) ;
|
|
|
|
while( **ptridentifier )
|
|
{
|
|
if (!Def_ReadValue2( name, *ptridentifier, ptrvar++ ))
|
|
{
|
|
printf( "Error %s: '%s' missing\n", name, *ptridentifier ) ;
|
|
exit( 1 ) ;
|
|
}
|
|
ptridentifier++;
|
|
}
|
|
}
|
|
}
|
|
|
|
//··········································································
|
|
// wave device
|
|
|
|
if(inits & INIT_WAVE)
|
|
{
|
|
printf("Initialising Wave device. Please wait...\n\n");
|
|
|
|
ptr = Def_ReadString( name, "WaveExec" ) ;
|
|
if( ptr )
|
|
if ((*ptr!=0) AND stricmp(ptr, "NoExec") AND stricmp(ptr, midiptr))
|
|
{
|
|
spawnl(P_WAIT, ptr, ptr, NULL);
|
|
printf("\n");
|
|
}
|
|
|
|
ptr = Def_ReadString( name, "WaveDriver" ) ;
|
|
if( !ptr )
|
|
{
|
|
printf( "Warning %s: 'WaveDriver' missing\n", name ) ;
|
|
ptr = rien ;
|
|
}
|
|
|
|
if (stricmp(ptr, "NoWave"))
|
|
strcpy( Driver, ptr ) ;
|
|
else
|
|
Driver[0]=0 ;
|
|
|
|
if( Driver[0] != 0 ) /* si driver wave */
|
|
{
|
|
|
|
if( !WaveInitDLL( Driver ) ) exit( 1 ) ;
|
|
|
|
WaveAskVars( &ptridentifier, &ptrvar ) ;
|
|
|
|
while( **ptridentifier )
|
|
{
|
|
if (!Def_ReadValue2( name, *ptridentifier, ptrvar++ ))
|
|
{
|
|
printf( "Error %s: '%s' missing\n", name, *ptridentifier ) ;
|
|
exit( 1 ) ;
|
|
}
|
|
ptridentifier++;
|
|
}
|
|
|
|
if( !InitWave() ) exit( 1 ) ;
|
|
}
|
|
}
|
|
|
|
//··········································································
|
|
// system etc
|
|
|
|
InitSystem() ;
|
|
if (inits & INIT_SVGA)
|
|
InitGraphSvga() ;
|
|
else if (inits & INIT_MCGA)
|
|
InitGraphMcga() ;
|
|
|
|
if (VESA_Error)
|
|
{
|
|
printf( "Error: SVGA card BIOS does not support VESA extensions.\n") ;
|
|
printf( " Please refer to your SVGA card documentation for installing VESA driver.\n") ;
|
|
exit( 1 ) ;
|
|
}
|
|
|
|
InitKeyboard() ;
|
|
|
|
//··········································································
|
|
// init Timer (TimerRef et NbF) selon midi installée ou non
|
|
|
|
if( Midi_Driver_Enable )
|
|
{
|
|
HandleTimer = AIL_register_timer( NewProc08 ) ;
|
|
AIL_set_timer_frequency( HandleTimer, 50 ) ;
|
|
AIL_start_timer( HandleTimer ) ;
|
|
}
|
|
else
|
|
{
|
|
InitTimer() ;
|
|
}
|
|
|
|
// InitSample() ;
|
|
|
|
}
|
|
|
|
/*══════════════════════════════════════════════════════════════════════════*/
|
|
|
|
void ClearAdelineSystem()
|
|
{
|
|
// ClearSample() ;
|
|
|
|
if( !Midi_Driver_Enable ) ClearTimer() ;
|
|
ClearKeyboard() ;
|
|
ClearGraphSvga() ;
|
|
ClearSystem() ;
|
|
ClearWave();
|
|
ClearMidi();
|
|
}
|
|
|
|
/*══════════════════════════════════════════════════════════════════════════*/
|