diff --git a/divers.c b/divers.c index cfce7570..38b31af7 100644 --- a/divers.c +++ b/divers.c @@ -4,6 +4,22 @@ #include "sdlscreen.h" #include "global.h" +// Gestion du mode texte de départ (pour pouvoir y retourner en cas de problème +byte Recuperer_nb_lignes(void) +{ + /* + mov ax,1130h + xor bh,bh + push es + int 10h + pop es + inc dl + mov [esp+28],dl + */ + puts("Recuperer_nb_lignes non implémenté!\n"); + return 0; +} + word Palette_Compter_nb_couleurs_utilisees(dword* Tableau) { int Nombre_De_Pixels=0; //ECX @@ -75,12 +91,13 @@ void Effacer_image_courante(byte Couleur) } void Sensibilite_souris(word X,word Y) -{;//TODO Implémenter la sensibilité souris +{ + puts("Sensibilite_souris non implémenté!\n"); } void Get_input(void) { - SDL_PollEvent(Evenement_SDL); + puts("Get_input non implémenté!\n"); } @@ -133,12 +150,6 @@ void Clavier_de_depart(void) puts("Clavier_de_depart non implémenté!\n"); } -byte Recuperer_nb_lignes(void) -{ - puts("Recuperer_nb_lignes non implémenté!\n"); - return 0; -} - void Clavier_americain(void) { puts("Clavier_americain non implémenté!\n"); @@ -249,6 +260,15 @@ byte Lit_pixel_dans_ecran_backup (word X,word Y) } byte Type_de_lecteur_de_disquette(byte Numero_de_lecteur) +// Numero_de_lecteur compris entre 0 et 3 (4 lecteurs de disquettes) +// +// Résultat = 0 : Pas de lecteur +// 1 : Lecteur 360 Ko +// 2 : Lecteur 1.2 Mo +// 3 : Lecteur 720 Ko +// 4 : Lecteur 1.4 Mo +// 5 : Lecteur 2.8 Mo (??? pas sur ???) +// 6 : Lecteur 2.8 Mo { puts("Type_de_lecteur_de_disquette non implémenté!\n"); return 0; diff --git a/init.c b/init.c index 40a4691b..c86c1fbe 100644 --- a/init.c +++ b/init.c @@ -20,6 +20,8 @@ #include #include "divers.h" +#include "errno.h" + // On déclare méchamment le prototype de Erreur pour éviter de faire un // fichier "main.h": void Erreur(int Code); @@ -27,11 +29,13 @@ void Erreur(int Code); // Chercher le répertoire contenant GFX2.EXE void Chercher_repertoire_du_programme(char * Chaine) { - int Position; + /*int Position; strcpy(Repertoire_du_programme,Chaine); - for (Position=strlen(Repertoire_du_programme);Repertoire_du_programme[Position]!='\\';Position--); - Repertoire_du_programme[Position+1]='\0'; + for (Position=strlen(Repertoire_du_programme);Repertoire_du_programme[Position]!='/';Position--); //sous linux c'est un /, sous windows c'est \\ + Repertoire_du_programme[Position+1]='\0';*/ + puts("Chercher_repertoire_du_programme: implémentation incomplète"); + Repertoire_du_programme[0]=0; //On va travailler dans le dossier courant ... } @@ -64,7 +68,7 @@ word Drive_Touche[26]= 0x0415, 0x042C }; -// Ajouter un lecteur … la liste de lecteurs +// Ajouter un lecteur à la liste de lecteurs void Ajouter_lecteur(byte Numero, byte Type) { Drive[Nb_drives].Lettre=Numero+65; @@ -77,7 +81,8 @@ void Ajouter_lecteur(byte Numero, byte Type) // Rechercher la liste et le type des lecteurs de la machine void Rechercher_drives(void) -{ +{ +/* byte Lecteur; byte Nb_lecteurs_disquettes; byte Lecteur_de_disquettes; @@ -186,7 +191,9 @@ void Rechercher_drives(void) if (Freespace(Lecteur+1)!=-1) Ajouter_lecteur(Lecteur,DRIVE_NETWORK); } - +*/ +//Sous linux, il n'y a pas de lecteurs, on va juste mettre un disque dur qui pointera vers la racine +Ajouter_lecteur(0,DRIVE_HDD); //Le lecteur numéro 0 est un disque dur. } @@ -228,24 +235,38 @@ void Charger_DAT(void) byte Pos_Y; word Mot_temporaire; - struct stat* Informations_Fichier=NULL; - + struct stat Informations_Fichier; +/* strcpy(Nom_du_fichier,Repertoire_du_programme); - strcat(Nom_du_fichier,"GFX2.DAT"); - - Handle=open(Nom_du_fichier,O_RDONLY); - if (Handle==-1) - Erreur(ERREUR_DAT_ABSENT); - stat(Nom_du_fichier,Informations_Fichier); - Taille_fichier=Informations_Fichier->st_size; + strcat(Nom_du_fichier,"gfx2.dat"); +*/ + strcpy(Nom_du_fichier,"gfx2.dat"); + puts("Charger_DAT incomplet"); + if(stat(Nom_du_fichier,&Informations_Fichier)) + switch errno + { + case EACCES: puts("La permission de parcours est refusée pour un des répertoires contenu dans le chemin path."); break; + case EBADF: puts("filedes est un mauvais descripteur."); break; + case EFAULT: puts("Un pointeur se trouve en dehors de l'espace d'adressage."); break; + case ELOOP: puts("Trop de liens symboliques rencontrés dans le chemin d'accès."); break; + case ENAMETOOLONG: puts("Nom de fichier trop long."); break; + case ENOENT: puts("Un composant du chemin path n'existe pas, ou il s'agit d'une chaîne vide."); break; + case ENOMEM: puts("Pas assez de mémoire pour le noyau."); break; + case ENOTDIR: puts("Un composant du chemin d'accès n'est pas un répertoire."); break; + } + Taille_fichier=Informations_Fichier.st_size; if (Taille_fichier!=TAILLE_FICHIER_DATA) - Erreur(ERREUR_DAT_CORROMPU); - + Erreur(ERREUR_DAT_CORROMPU); + + Handle=open(Nom_du_fichier,O_RDONLY); + if (Handle==-1) + Erreur(ERREUR_DAT_ABSENT); + if (read(Handle,Palette_defaut,sizeof(T_Palette))!=sizeof(T_Palette)) Erreur(ERREUR_DAT_CORROMPU); - Decrypte((byte *)Palette_defaut,sizeof(T_Palette)); - + Decrypte((byte *)Palette_defaut,sizeof(T_Palette)); + if (read(Handle,BLOCK_MENU,LARGEUR_MENU*HAUTEUR_MENU)!=LARGEUR_MENU*HAUTEUR_MENU) Erreur(ERREUR_DAT_CORROMPU); Decrypte((byte *)BLOCK_MENU,LARGEUR_MENU*HAUTEUR_MENU); @@ -283,8 +304,8 @@ void Charger_DAT(void) if (read(Handle,TRAME_PREDEFINIE,2*16*NB_TRAMES_PREDEFINIES)!=2*16*NB_TRAMES_PREDEFINIES) Erreur(ERREUR_DAT_CORROMPU); - Decrypte((byte *)TRAME_PREDEFINIE,2*16*NB_TRAMES_PREDEFINIES); - + Decrypte((byte *)TRAME_PREDEFINIE,2*16*NB_TRAMES_PREDEFINIES); + // Lecture des fontes 8x8: if (!(Fonte_temporaire=(byte *)malloc(2048))) Erreur(ERREUR_MEMOIRE); @@ -341,8 +362,8 @@ void Charger_DAT(void) Erreur(ERREUR_DAT_CORROMPU); } - close(Handle); - + close(Handle); + Section_d_aide_en_cours=0; Position_d_aide_en_cours=0; @@ -941,7 +962,7 @@ void Initialisation_des_boutons(void) Initialiser_bouton(BOUTON_CHOIX_COL, LARGEUR_MENU+1,2, - 1,32, // La largeur est mise … jour … chq chngmnt de mode + 1,32, // La largeur est mise à jour à chq chngmnt de mode FORME_BOUTON_SANS_CADRE, Bouton_Choix_forecolor,Bouton_Choix_backcolor, Rien_du_tout, @@ -1738,17 +1759,19 @@ int Charger_CFG(int Tout_charger) struct Config_Chunk Chunk; struct Config_Infos_touche CFG_Infos_touche; struct Config_Mode_video CFG_Mode_video; - struct stat* Informations_Fichier=NULL; + struct stat Informations_Fichier; strcpy(Nom_du_fichier,Repertoire_du_programme); - strcat(Nom_du_fichier,"GFX2.CFG"); + strcat(Nom_du_fichier,"gfx2.cfg"); - if ((Handle=open(Nom_du_fichier,O_RDONLY))==-1) + + stat(Nom_du_fichier,&Informations_Fichier); + Taille_fichier=Informations_Fichier.st_size; + + if ((Handle=open(Nom_du_fichier,O_RDONLY))==-1) return ERREUR_CFG_ABSENT; - stat(Nom_du_fichier,Informations_Fichier); - Taille_fichier=Informations_Fichier->st_size; - + if ( (Taille_fichier