#include <STDIO.H>
#include <CONIO.H>
#include <ERRNO.H>
#include <STDLIB.H>
#include <STRING.H>
#include <PROCESS.H>
#include "SOUREXEC/EXECCLAV.H"
#include "SOUREXEC/EXECGRAP.H"
#include "SOUREXEC/EXECOUTI.H"
#include "SOUREXEC/EXECCHAR.H"
extern void Page_Regle (void);
extern void Page_Tableaux (void);
extern void Former_Acces_Fichier (char*,short,short);
extern BOOL Verifier_Tableau (short);
extern BOOL Verifier_Serie (short);
extern BOOL Verifier_Tableaux (void);
extern void Page_Scores (BOOL);
void Afficher_Presentation (void);
char NOM_TABLEAU [32] = "LEVELS01/LEVEL";
short numero_tableau = 1;
short numero_serie = 1;
BOOL hasard = OFF;
enreg_menu menu1;
void main (void)
{
    BOOL exec;
    BOOL etat;
    int retour;
    char stab [3];
    char bufrep [9];
    Activer_Ecran ();
    Installer_Clavier_Interruption ();
    Lire_Palette ("SPRFILES/COULEURS.PAL");
    Afficher_Page (0);
    Definir_Bobs ();
    menu1.page = PAGE1;
    menu1.select = 0;
    menu1.cl_car1 = 96;
    menu1.cl_car2 = 112;
    menu1.cl_fond = 255;
    menu1.y_ecran = 210;
    menu1.largeur_ecran = 320;
    menu1.hauteur_option_maxi = 130;
    menu1.nombre_option = 6;
    menu1.echelle_x = 1;
    menu1.echelle_y = 2;
    strcpy (menu1.option[0],"JOUER");
    strcpy (menu1.option[1],"TABLEAUX");
    strcpy (menu1.option[2],"EDITEUR");
    strcpy (menu1.option[3],"REGLE");
    strcpy (menu1.option[4],"SCORES");
    strcpy (menu1.option[5],"QUITTER");
    Afficher_Presentation ();
    do
    {
        Select_Option (PAGE1,&menu1);
        switch (menu1.select)
        {
        case 0:
        {
            etat = Verifier_Serie (numero_serie);
            if (etat == VRAI)
            {
                exec = FAUX;
                if (hasard == ON)
                {
                    etat = Verifier_Tableaux ();
                    if (etat == VRAI)
                    {
                        sprintf(stab,"%d",-1);
                        exec = VRAI;
                    }
                }
                if (hasard == OFF)
                {
                    etat = Verifier_Tableau (numero_tableau);
                    if (etat == VRAI)
                    {
                        sprintf(stab,"%d",numero_tableau);
                        exec = VRAI;
                    }
                }
                if (exec == VRAI)
                {
                    Former_Acces_Fichier (NOM_TABLEAU,
                                          numero_serie,
                                          numero_tableau);
                    strncpy (bufrep,NOM_TABLEAU,8);
                    *(bufrep + 8) = 0;
                    Desinstaller_Clavier_Interruption ();
                    retour = spawnl (P_WAIT,"SNAKLES.EXE","0",bufrep,stab,NULL);
                    if (retour == -1)
                    {
                        Desactiver_Ecran ();
                        Supprimer_Bobs ();
                        if (errno == E2BIG )
                            cprintf ("\n\rliste des arguments est trop longue");
                        if (errno == EACCES)
                            cprintf ("\n\rAcces au fichier est refusee");
                        if (errno == EMFILE)
                            cprintf ("\n\rTrop de fichier ouverts simultanement");
                        if (errno == ENOENT)
                            cprintf ("\n\rFichier ou chemin d'acces non trouve");
                        if (errno == ENOMEM)
                            cprintf ("\n\rEspace memoire insuffisant");
                        exit (EXIT_SUCCESS);
                    }
                    Activer_Ecran ();
                    Installer_Clavier_Interruption ();
                    Lire_Palette ("SPRFILES/COULEURS.PAL");
                    Afficher_Page (PAGE1);
                    Page_Scores (SAISIE_ON);
                    Afficher_Presentation ();
                }
            }
            break;
        }
        case 1:
        {
            Page_Tableaux ();
            break;
        }
        case 2:
        {
            Former_Acces_Fichier (NOM_TABLEAU,
                                  numero_serie,
                                  numero_tableau);
            strncpy (bufrep,NOM_TABLEAU,8);
            *(bufrep + 8) = 0;
            Desinstaller_Clavier_Interruption ();
            retour = spawnl (P_WAIT,"EDITEUR.EXE","0",bufrep,NULL);
            if (retour == -1)
            {
                Desactiver_Ecran ();
                Supprimer_Bobs ();
                if (errno == E2BIG )
                    cprintf ("\n\rliste des arguments est trop longue");
                if (errno == EACCES)
                    cprintf ("\n\rAcces au fichier est refusee");
                if (errno == EMFILE)
                    cprintf ("\n\rTrop de fichier ouverts simultanement");
                if (errno == ENOENT)
                    cprintf ("\n\rFichier ou chemin d'acces non trouve");
                if (errno == ENOMEM)
                    cprintf ("\n\rEspace memoire insuffisant");
                exit (EXIT_SUCCESS);
            }
            Activer_Ecran ();
            Installer_Clavier_Interruption ();
            Lire_Palette ("SPRFILES/COULEURS.PAL");
            Afficher_Page (PAGE0);
            Afficher_Presentation ();
            break;
        }
        case 3:
        {
            Page_Regle ();
            break;
        }
        case 4:
        {
            Page_Scores (SAISIE_OFF);
            break;
        }
        }
    }
    while (menu1.select != 5);
    Supprimer_Bobs ();
    Desinstaller_Clavier_Interruption ();
    Cls (PAGE0,0);
    Afficher_Page (PAGE0);
    Cls (PAGE1,0);
    Afficher_Page (PAGE1);
    Desactiver_Ecran ();
}
void Afficher_Presentation (void)
{
    Cls (PAGE1,0);
    Lire_Image_Pcx ("SPRFILES/INTRO",PAGE1,0,20,MASK_ON,0,0,319,134);
    Afficher_Menu (&menu1);
    Print (PAGE1,1,1,220,145,245,255,"\DBVERSION 1.1");
    Afficher_Page (PAGE1);
}