SDL Graphics mode detection and checking if valid, CFG saves only configuration for valid modes where the user set <3 | Imperfect | Unsupported.
Modes are not sorted yet (cosmetic) git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@199 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
parent
0705aae104
commit
40fe3ccf09
30
boutons.c
30
boutons.c
@ -1184,9 +1184,7 @@ void Cocher_bouton_mode(short Pos_X, short Pos_Y, byte Etat)
|
||||
{
|
||||
byte Couleur;
|
||||
|
||||
if (Etat>=128)
|
||||
Etat-=128;
|
||||
switch (Etat)
|
||||
switch (Etat & 0x7F)
|
||||
{
|
||||
case 0 : Couleur=CM_Blanc; break;
|
||||
case 1 : Couleur=CM_Clair; break;
|
||||
@ -1276,7 +1274,6 @@ void Bouton_Resol(void)
|
||||
short Debut_liste;
|
||||
short Position_curseur;
|
||||
short Temp;
|
||||
byte Temp2;
|
||||
char Chaine[5];
|
||||
struct Fenetre_Bouton_special * Bouton_saisie_Width, * Bouton_saisie_Height;
|
||||
|
||||
@ -1314,14 +1311,14 @@ void Bouton_Resol(void)
|
||||
|
||||
if (Mode_choisi>=6)
|
||||
{
|
||||
if (Mode_choisi<NB_MODES_VIDEO-6)
|
||||
if (Mode_choisi<Nb_modes_video-6)
|
||||
{
|
||||
Debut_liste=Mode_choisi-5;
|
||||
Position_curseur=5;
|
||||
}
|
||||
else
|
||||
{
|
||||
Debut_liste=NB_MODES_VIDEO-12;
|
||||
Debut_liste=Nb_modes_video-12;
|
||||
Position_curseur=Mode_choisi-Debut_liste;
|
||||
}
|
||||
}
|
||||
@ -1331,7 +1328,7 @@ void Bouton_Resol(void)
|
||||
Position_curseur=Mode_choisi;
|
||||
}
|
||||
|
||||
Fenetre_Definir_bouton_scroller(271,69,97,NB_MODES_VIDEO,12,Debut_liste); // 6
|
||||
Fenetre_Definir_bouton_scroller(271,69,97,Nb_modes_video,12,Debut_liste); // 6
|
||||
|
||||
// Les 12 petits boutons indiquant l'état des modes
|
||||
for (Temp=0; Temp<12; Temp++)
|
||||
@ -1434,14 +1431,13 @@ void Bouton_Resol(void)
|
||||
|
||||
default: // Boutons de tag des états des modes
|
||||
Temp=Debut_liste+Bouton_clicke-7;
|
||||
if (Temp) // On n'a pas le droit de cocher le mode fenêtré
|
||||
if (Temp && // On n'a pas le droit de cocher le mode fenêtré
|
||||
!(Mode_video[Temp].Etat & 128)) // Ni ceux non détectés par SDL
|
||||
{
|
||||
Temp2=(Mode_video[Temp].Etat & 0x80)?128:0;
|
||||
|
||||
if (Fenetre_Attribut1==A_GAUCHE)
|
||||
Mode_video[Temp].Etat=Temp2+(((Mode_video[Temp].Etat&0x7F)+1)&3);
|
||||
Mode_video[Temp].Etat=((Mode_video[Temp].Etat&0x7F)+1)&3;
|
||||
else
|
||||
Mode_video[Temp].Etat=Temp2+(((Mode_video[Temp].Etat&0x7F)+3)&3);
|
||||
Mode_video[Temp].Etat=((Mode_video[Temp].Etat&0x7F)+3)&3;
|
||||
|
||||
Effacer_curseur();
|
||||
Cocher_bouton_mode(19,16+(Bouton_clicke<<3),Mode_video[Temp].Etat);
|
||||
@ -1464,7 +1460,7 @@ void Bouton_Resol(void)
|
||||
if (Position_curseur<11)
|
||||
Position_curseur++;
|
||||
else
|
||||
if (Debut_liste<NB_MODES_VIDEO-12)
|
||||
if (Debut_liste<Nb_modes_video-12)
|
||||
Debut_liste++;
|
||||
Scroller_la_liste_des_modes(Debut_liste,Position_curseur,&Mode_choisi);
|
||||
break;
|
||||
@ -1485,10 +1481,10 @@ void Bouton_Resol(void)
|
||||
Position_curseur=11;
|
||||
else
|
||||
{
|
||||
if (Debut_liste<NB_MODES_VIDEO-23)
|
||||
if (Debut_liste<Nb_modes_video-23)
|
||||
Debut_liste+=11;
|
||||
else
|
||||
Debut_liste=NB_MODES_VIDEO-12;
|
||||
Debut_liste=Nb_modes_video-12;
|
||||
}
|
||||
Scroller_la_liste_des_modes(Debut_liste,Position_curseur,&Mode_choisi);
|
||||
break;
|
||||
@ -1498,7 +1494,7 @@ void Bouton_Resol(void)
|
||||
Scroller_la_liste_des_modes(Debut_liste,Position_curseur,&Mode_choisi);
|
||||
break;
|
||||
case SDLK_END : // End
|
||||
Debut_liste=NB_MODES_VIDEO-12;
|
||||
Debut_liste=Nb_modes_video-12;
|
||||
Position_curseur=11;
|
||||
Scroller_la_liste_des_modes(Debut_liste,Position_curseur,&Mode_choisi);
|
||||
break;
|
||||
@ -2873,7 +2869,7 @@ int Meilleur_mode_video(void)
|
||||
Meilleure_hauteur=0;
|
||||
|
||||
|
||||
for (Mode=0; Mode<=NB_MODES_VIDEO; Mode++)
|
||||
for (Mode=0; Mode<Nb_modes_video; Mode++)
|
||||
{
|
||||
if (Mode_video[Mode].Fullscreen && Mode_video[Mode].Etat<2)
|
||||
{
|
||||
|
||||
3
const.h
3
const.h
@ -15,7 +15,7 @@
|
||||
#define BETA2 0 // |
|
||||
#define ALPHA_BETA "ß" // Type de la version "Þ" ou "ß"
|
||||
#define DAT_DEBUT_INI_PAR_DEFAUT 0xF385 // Dans gfx2.dat, début du fichier gfx2.ini standard
|
||||
#define NB_MODES_VIDEO 61 // Nombre de modes vidéo
|
||||
#define MAX_MODES_VIDEO 100 // Nombre de modes vidéo maxi
|
||||
#define NB_BOUTONS 38 // Nombre de boutons à gérer
|
||||
#define NB_TOUCHES 134 // Nombre de combinaisons de touches
|
||||
#define NB_TOUCHES_SPECIALES 72 // Nombre de touches spéciales
|
||||
@ -99,7 +99,6 @@ enum CODES_D_ERREURS
|
||||
ERREUR_MEMOIRE, // Plus de mémoire
|
||||
ERREUR_LIGNE_COMMANDE, // Erreur sur la ligne de commande
|
||||
ERREUR_DRIVER_SOURIS, // Pas de driver souris installé
|
||||
ERREUR_MODE_VESA_INVALIDE, // Mode VESA demandé sur la ligne de commande invalide
|
||||
ERREUR_MODE_INTERDIT, // Mode demandé sur la ligne de commande interdit (coché en noir)
|
||||
ERREUR_NUMERO_MODE, // Erreur de choix de mode sur la ligne de commande
|
||||
ERREUR_SAUVEGARDE_CFG, // Erreur en écriture pour GFX2.CFG
|
||||
|
||||
3
global.h
3
global.h
@ -71,8 +71,9 @@ struct S_Mode_video
|
||||
word Fullscreen;
|
||||
byte Etat; // 0:Cool 1:OK ; 2:Bof ; 3:Naze ; si on rajoute +128 => incompatible
|
||||
};
|
||||
GLOBAL struct S_Mode_video Mode_video[NB_MODES_VIDEO];
|
||||
GLOBAL struct S_Mode_video Mode_video[MAX_MODES_VIDEO];
|
||||
|
||||
GLOBAL int Nb_modes_video; // Nombre de modes réellement recensés dans Mode_video[]
|
||||
|
||||
GLOBAL struct
|
||||
{
|
||||
|
||||
2
graph.c
2
graph.c
@ -991,7 +991,7 @@ void Initialiser_mode_video(int Largeur, int Hauteur, int Fullscreen)
|
||||
if (!Fullscreen)
|
||||
Resolution_actuelle=0;
|
||||
else
|
||||
for (Indice=1; Indice<NB_MODES_VIDEO; Indice++)
|
||||
for (Indice=1; Indice<Nb_modes_video; Indice++)
|
||||
{
|
||||
if (Mode_video[Indice].Largeur==Largeur_ecran &&
|
||||
Mode_video[Indice].Hauteur==Hauteur_ecran)
|
||||
|
||||
208
init.c
208
init.c
@ -1302,14 +1302,30 @@ void Initialisation_des_operations(void)
|
||||
// Définition d'un mode:
|
||||
|
||||
void Definir_mode_video(int Numero,
|
||||
short Largeur, short Hauteur,
|
||||
short Largeur,
|
||||
short Hauteur,
|
||||
byte Mode,
|
||||
word Plein_Ecran)
|
||||
{
|
||||
word Fullscreen)
|
||||
{
|
||||
byte Supporte = 0;
|
||||
|
||||
if (Numero >= MAX_MODES_VIDEO)
|
||||
{
|
||||
DEBUG("Erreur! Tentative de créer un mode de trop:", Numero);
|
||||
return;
|
||||
}
|
||||
if (!Fullscreen)
|
||||
Supporte = 128; // Prefere, non modifiable
|
||||
else if (SDL_VideoModeOK(Largeur, Hauteur, 8, SDL_FULLSCREEN))
|
||||
Supporte = 1; // Supporte
|
||||
else
|
||||
Supporte = 128+3; // Non supporte, non modifiable
|
||||
|
||||
Mode_video[Numero].Largeur = Largeur;
|
||||
Mode_video[Numero].Hauteur = Hauteur;
|
||||
Mode_video[Numero].Mode = Mode;
|
||||
Mode_video[Numero].Fullscreen = Plein_Ecran;
|
||||
Mode_video[Numero].Fullscreen = Fullscreen;
|
||||
Mode_video[Numero].Etat = Supporte;
|
||||
}
|
||||
|
||||
|
||||
@ -1318,88 +1334,91 @@ void Definir_mode_video(int Numero,
|
||||
void Definition_des_modes_video(void)
|
||||
{ // Numero LargHaut Mode FXFY Ratio Ref WinOnly Pointeur
|
||||
SDL_Rect** Modes;
|
||||
int Indice=0;
|
||||
Definir_mode_video( Indice++, 640,480,MODE_SDL, 0);
|
||||
Definir_mode_video( Indice++, 320,200,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 320,224,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 320,240,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 320,256,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 320,270,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 320,282,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 320,300,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 320,360,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 320,400,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 320,448,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 320,480,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 320,512,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 320,540,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 320,564,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 320,600,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 360,200,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 360,224,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 360,240,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 360,256,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 360,270,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 360,282,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 360,300,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 360,360,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 360,400,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 360,448,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 360,480,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 360,512,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 360,540,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 360,564,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 360,600,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 400,200,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 400,224,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 400,240,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 400,256,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 400,270,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 400,282,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 400,300,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 400,360,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 400,400,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 400,448,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 400,480,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 400,512,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 400,540,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 400,564,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 400,600,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 640,224,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 640,240,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 640,256,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 640,270,MODE_SDL, 1);
|
||||
//Definir_mode_video( Indice++, 640,282,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 640,300,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 640,350,MODE_SDL, 1);
|
||||
//Definir_mode_video( Indice++, 640,360,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 640,400,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 640,448,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 640,480,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 640,512,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 640,540,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 640,564,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 640,600,MODE_SDL, 1);
|
||||
Definir_mode_video( Indice++, 800,600,MODE_SDL, 1);
|
||||
Definir_mode_video(Indice++,1024,768,MODE_SDL, 1);
|
||||
Nb_modes_video=0;
|
||||
Definir_mode_video( Nb_modes_video++, 640,480,MODE_SDL, 0);
|
||||
Definir_mode_video( Nb_modes_video++, 320,200,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 320,224,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 320,240,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 320,256,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 320,270,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 320,282,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 320,300,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 320,360,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 320,400,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 320,448,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 320,480,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 320,512,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 320,540,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 320,564,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 320,600,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 360,200,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 360,224,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 360,240,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 360,256,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 360,270,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 360,282,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 360,300,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 360,360,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 360,400,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 360,448,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 360,480,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 360,512,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 360,540,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 360,564,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 360,600,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 400,200,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 400,224,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 400,240,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 400,256,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 400,270,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 400,282,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 400,300,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 400,360,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 400,400,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 400,448,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 400,480,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 400,512,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 400,540,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 400,564,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 400,600,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 640,224,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 640,240,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 640,256,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 640,270,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 640,300,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 640,350,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 640,400,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 640,448,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 640,480,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 640,512,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 640,540,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 640,564,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 640,600,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++, 800,600,MODE_SDL, 1);
|
||||
Definir_mode_video( Nb_modes_video++,1024,768,MODE_SDL, 1);
|
||||
|
||||
Modes = SDL_ListModes(NULL, SDL_FULLSCREEN);
|
||||
if ((Modes != (SDL_Rect**)0) && (Modes!=(SDL_Rect**)-1))
|
||||
{
|
||||
int Indice;
|
||||
for (Indice=0; Modes[Indice]; Indice++)
|
||||
{
|
||||
int Indice2;
|
||||
for (Indice2=0; Indice2 < NB_MODES_VIDEO; Indice2++)
|
||||
for (Indice2=1; Indice2 < Nb_modes_video; Indice2++)
|
||||
if (Modes[Indice]->w == Mode_video[Indice2].Largeur &&
|
||||
Modes[Indice]->h == Mode_video[Indice2].Hauteur)
|
||||
{
|
||||
Mode_video[Indice2].Etat = 1;
|
||||
// Mode déja prévu: ok
|
||||
break;
|
||||
}
|
||||
if (Indice2 >= Nb_modes_video)
|
||||
{
|
||||
// Nouveau mode à ajouter à la liste
|
||||
Definir_mode_video( Nb_modes_video++,Modes[Indice]->w,Modes[Indice]->h,MODE_SDL, 1);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
@ -1787,14 +1806,18 @@ int Charger_CFG(int Tout_charger)
|
||||
!read_word_le(Handle, &CFG_Mode_video.Largeur) ||
|
||||
!read_word_le(Handle, &CFG_Mode_video.Hauteur) )
|
||||
goto Erreur_lecture_config;
|
||||
|
||||
for (Indice2=0; Indice2<NB_MODES_VIDEO; Indice2++)
|
||||
|
||||
for (Indice2=1; Indice2<Nb_modes_video; Indice2++)
|
||||
{
|
||||
if (Mode_video[Indice2].Largeur==CFG_Mode_video.Largeur &&
|
||||
Mode_video[Indice2].Hauteur==CFG_Mode_video.Hauteur &&
|
||||
Mode_video[Indice2].Mode==(CFG_Mode_video.Etat>>6))
|
||||
Mode_video[Indice2].Hauteur==CFG_Mode_video.Hauteur)
|
||||
{
|
||||
Mode_video[Indice2].Etat=(Mode_video[Indice2].Etat&0xFC) | (CFG_Mode_video.Etat&3);
|
||||
// On ne prend le paramètre utilisateur que si la résolution
|
||||
// est effectivement supportée par SDL
|
||||
// Seules les deux petits bits sont récupérés, car les anciens fichiers
|
||||
// de configuration (DOS 96.5%) utilisaient d'autres bits.
|
||||
if (! (Mode_video[Indice2].Etat & 128))
|
||||
Mode_video[Indice2].Etat=CFG_Mode_video.Etat&3;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -1957,6 +1980,7 @@ int Sauver_CFG(void)
|
||||
FILE* Handle;
|
||||
int Indice;
|
||||
int Indice2;
|
||||
int Modes_a_sauver;
|
||||
//byte Octet;
|
||||
char Nom_du_fichier[TAILLE_CHEMIN_FICHIER];
|
||||
struct Config_Header CFG_Header;
|
||||
@ -2007,23 +2031,31 @@ int Sauver_CFG(void)
|
||||
goto Erreur_sauvegarde_config;
|
||||
}
|
||||
|
||||
// D'abord compter les modes pour lesquels l'utilisateur a mis une préférence
|
||||
Modes_a_sauver=0;
|
||||
for (Indice=1; Indice<Nb_modes_video; Indice++)
|
||||
if (Mode_video[Indice].Etat==0 || Mode_video[Indice].Etat==2 || Mode_video[Indice].Etat==3)
|
||||
Modes_a_sauver++;
|
||||
|
||||
// Sauvegarde de l'état de chaque mode vidéo
|
||||
Chunk.Numero=CHUNK_MODES_VIDEO;
|
||||
Chunk.Taille=NB_MODES_VIDEO * sizeof(CFG_Mode_video);
|
||||
Chunk.Taille=Modes_a_sauver * sizeof(CFG_Mode_video);
|
||||
|
||||
if (!write_byte(Handle, Chunk.Numero) ||
|
||||
!write_word_le(Handle, Chunk.Taille) )
|
||||
goto Erreur_sauvegarde_config;
|
||||
for (Indice=0; Indice<NB_MODES_VIDEO; Indice++)
|
||||
{
|
||||
CFG_Mode_video.Etat =(Mode_video[Indice].Mode<<6) | (Mode_video[Indice].Etat&3);
|
||||
CFG_Mode_video.Largeur=Mode_video[Indice].Largeur;
|
||||
CFG_Mode_video.Hauteur=Mode_video[Indice].Hauteur;
|
||||
|
||||
if (!write_byte(Handle, CFG_Mode_video.Etat) ||
|
||||
!write_word_le(Handle, CFG_Mode_video.Largeur) ||
|
||||
!write_word_le(Handle, CFG_Mode_video.Hauteur) )
|
||||
goto Erreur_sauvegarde_config;
|
||||
}
|
||||
for (Indice=1; Indice<Nb_modes_video; Indice++)
|
||||
if (Mode_video[Indice].Etat==0 || Mode_video[Indice].Etat==2 || Mode_video[Indice].Etat==3)
|
||||
{
|
||||
CFG_Mode_video.Etat =Mode_video[Indice].Etat;
|
||||
CFG_Mode_video.Largeur=Mode_video[Indice].Largeur;
|
||||
CFG_Mode_video.Hauteur=Mode_video[Indice].Hauteur;
|
||||
|
||||
if (!write_byte(Handle, CFG_Mode_video.Etat) ||
|
||||
!write_word_le(Handle, CFG_Mode_video.Largeur) ||
|
||||
!write_word_le(Handle, CFG_Mode_video.Hauteur) )
|
||||
goto Erreur_sauvegarde_config;
|
||||
}
|
||||
|
||||
// Ecriture des données du Shade (précédées du shade en cours)
|
||||
Chunk.Numero=CHUNK_SHADE;
|
||||
|
||||
10
main.c
10
main.c
@ -158,9 +158,6 @@ void Erreur_fonction(int Code, const char *Nom_fichier, int Numero_ligne, const
|
||||
case ERREUR_DRIVER_SOURIS : printf("Error: No mouse detected!\n");
|
||||
printf("Check if a mouse driver is installed and if your mouse is correctly connected.\n");
|
||||
break;
|
||||
case ERREUR_MODE_VESA_INVALIDE : printf("Error: Requested VESA mode not supported by your video card!\n");
|
||||
printf("You should try to run a VESA driver such as UNIVESA or UNIVBE.\n");
|
||||
break;
|
||||
case ERREUR_MODE_INTERDIT : printf("Error: The requested video mode has been disabled from the resolution menu!\n");
|
||||
printf("If you want to run the program in this mode, you'll have to start it with an\n");
|
||||
printf("enabled mode, then enter the resolution menu and enable the mode you want.\n");
|
||||
@ -259,11 +256,8 @@ void Analyse_de_la_ligne_de_commande(int argc,char * argv[])
|
||||
Erreur(ERREUR_LIGNE_COMMANDE);
|
||||
}
|
||||
|
||||
if (Mode_video[Resolution_actuelle].Etat>=128)
|
||||
Erreur(ERREUR_MODE_VESA_INVALIDE);
|
||||
else
|
||||
if (Mode_video[Resolution_actuelle].Etat==3)
|
||||
Erreur(ERREUR_MODE_INTERDIT);
|
||||
if ((Mode_video[Resolution_actuelle].Etat & 0x7F) == 3)
|
||||
Erreur(ERREUR_MODE_INTERDIT);
|
||||
}
|
||||
|
||||
// ------------------------ Initialiser le programme -------------------------
|
||||
|
||||
@ -606,7 +606,7 @@ int Charger_INI(struct S_Config * Conf)
|
||||
|
||||
if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Default_video_mode",1,Valeurs)))
|
||||
goto Erreur_Retour;
|
||||
if ((Valeurs[0]<0) || (Valeurs[0]>NB_MODES_VIDEO))
|
||||
if ((Valeurs[0]<0) || (Valeurs[0]>=Nb_modes_video))
|
||||
goto Erreur_ERREUR_INI_CORROMPU;
|
||||
Conf->Resolution_par_defaut=Valeurs[0];
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user