//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
//	MainWep.c
//	Luiz Marques Afonso 	Agosto/95
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
#include <windows.h>
#include <dos.h>
#include <string.h>

#include "laycab.h"

//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Variaveis Globais
char
	NomeSecaoSystemIni[] = "LAYCAB.DRV",
	ArquivoSystemIni[]   = "SYSTEM.INI",
	VarInterrupcoes[]    = "Habilita Interrupcoes",
//	VarVelocidade[]      = "Velocidade",
	VarPorta[]	     = "Porta",
	VarSincrono[]	 = "Sincrono",
	StrLPT1[]	     = "LPT1",
	StrLPT2[]	     = "LPT2",
    VarSementeMin[]  = "SementeMin",
    VarSementeMax[]  = "SementeMax",
    VarSemente[]     = "Semente";

HINSTANCE
	hInstance 	     = NULL;

//[LMA 17/07/99] 
#if 0
//int Velocidade 	     = VELOCIDADE_DEFAULT;
#else
WORD
    Semente,    // Valor do contador de temporização
    SementeMin,
    SementeMax;
#endif
WORD
	PortaParalela        = PORTA_DEFAULT;
PORTA_PARALELA
	Lpt		     = LPT1;
BOOL
	HabilitaIntr	     = TRUE,
	TemLPT2		     = TRUE,
        Sincrono	     = TRUE;	


void PegaSementeConfig( void );     //[LMA 17/07/99]
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
#pragma argsused
int CALLBACK _export
	LibMain( HINSTANCE hinst, WORD wDataSeg, WORD cbHeapSize, LPSTR lpszCmdLine )
{
	WORD
		*ptBIOS,
		porta;
	extern unsigned _near
		_0040H;
	int
		aux;
	char
		strPorta[ 5 ];

#if defined( DEBUG )
	extern WORD
		Psp;

	asm int 3;

	// Guarda o PSP da aplicacao corrente
	_AX = 0x5100;
	asm int 0x21;
	Psp = _BX;
#endif

#if defined( DEBUG )
	RegistraNoLog( "** LibMain() **" );
#endif

	/*** Pega a porta ( LPT1 ou LPT2 ) ***/
	GetPrivateProfileString( NomeSecaoSystemIni, VarPorta, "",
				 strPorta, sizeof( strPorta ), ArquivoSystemIni );

	Lpt = ( stricmp( strPorta, StrLPT2 ) )  ?  LPT1  :  LPT2  ;

	// Pega o endereco da porta paralela
	FP_SEG( ptBIOS ) = (unsigned) &_0040H;
	FP_OFF( ptBIOS ) = 0x08;
	if( ptBIOS )
	{
		porta = ptBIOS[ Lpt ];

		if( ! porta )
		{
			porta 	= ptBIOS[ LPT1 ];
			Lpt 	= LPT1;
			TemLPT2 = FALSE;
		}

		if( porta )
			PortaParalela = porta;
	}


    //[LMA 17/07/99] - Pega os extremos para o calculo da semente no lugar da velocidade
#if 0
	/*** Pega a velocidade ***/
	aux = GetPrivateProfileInt( NomeSecaoSystemIni, VarVelocidade, -1, ArquivoSystemIni );
	if( (aux != -1) && (aux >= VELOCIDADE_MIN) && (aux <= VELOCIDADE_MAX ) )
		Velocidade = aux;
#else

     PegaSementeConfig();

#endif


	/*** Pega flag de interrupcoes ***/
	aux = GetPrivateProfileInt( NomeSecaoSystemIni, VarInterrupcoes, 1, ArquivoSystemIni );
	HabilitaIntr = ( aux == 0 ) ? FALSE : TRUE;

	/*** Pega o flag do modo de funcionamento ***/
    aux = GetPrivateProfileInt( NomeSecaoSystemIni, VarSincrono, 1, ArquivoSystemIni );
	Sincrono = ( aux == 0 ) ? FALSE : TRUE;

	hInstance = hinst;

	return( 1 );
}
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
#pragma argsused
int CALLBACK _export
	WEP( int nExit )
{
#if defined( DEBUG )
	RegistraNoLog( "WEP" );
	RegistraNoLog( LOG_FIM_EXECUCAO );
#endif

	return 1;
}

//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
void
    PegaSementeConfig( void )
{
    WORD
        semente, sementeMin, sementeMax;

	sementeMin = GetPrivateProfileInt( NomeSecaoSystemIni, VarSementeMin, SEMENTE_MIN, ArquivoSystemIni );
    sementeMax = GetPrivateProfileInt( NomeSecaoSystemIni, VarSementeMax, SEMENTE_MAX, ArquivoSystemIni );
    semente    = GetPrivateProfileInt( NomeSecaoSystemIni, VarSemente, SEMENTE_DEFAULT, ArquivoSystemIni );

    if( ! ( (sementeMin <= semente) && (semente <= sementeMax) ) )
    {
        semente    = SEMENTE_DEFAULT;
        sementeMin = SEMENTE_MIN;
        sementeMax = SEMENTE_MAX;
    }

    //ajusta o valor das globais da semente
    SementeMin = sementeMin;
    SementeMax = sementeMax;
    Semente    = semente;
}

//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
