Resolution and window size remembered in gfx2.ini. Gfx2.ini now uses hosts' end-of-line character(s)

Removed Gfx2.ini from SVN, since it's automatically re-created from Gfx2.dat as needed.


git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@202 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
Yves Rizoud 2008-10-05 19:10:46 +00:00
parent e3bce08464
commit 54b4f5a121
8 changed files with 272 additions and 414 deletions

View File

@ -100,7 +100,6 @@ enum CODES_D_ERREURS
ERREUR_LIGNE_COMMANDE, // Erreur sur la ligne de commande
ERREUR_DRIVER_SOURIS, // Pas de driver souris installé
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
ERREUR_REPERTOIRE_DISPARU, // Le répertoire de lancement n'existe plus
ERREUR_INI_CORROMPU, // Le fichier GFX2.INI est corrompu

BIN
gfx2.dat

Binary file not shown.

289
gfx2.ini
View File

@ -1,289 +0,0 @@
###### GrafX2 initialization file ###### Fichier d'initialisation de GrafX2 ##
# # # #
# You may modify this file with any # Vous pouvez modifier ce fichier avec #
# standard ASCII text editor. # n'importe quel éditeur de texte #
# # ASCII standard. #
# # #
# Comments are preceded by ';' or # Les commentaires sont précédés par #
# '#'. # ';' ou '#'. #
# # #
# Options are not case sensitive and # Les options ne sont pas sensibles à #
# spaces are ignored. # la casse et les espaces sont ignorés.#
# # #
# You must not change the order of # Vous ne devez pas changer l'ordre #
# the sections and their options. # des sections et de leurs options. #
# You must not delete or put into # Vous ne devez pas effacer ou mettre #
# comment any section nor option. # en commentaire une section ou option.#
# # #
# Each option is preceded by a # Chaque option est précédée par un #
# comment which explains its meaning. # commentaire qui explique sa fonction.#
# # #
##############################################################################
[MOUSE] # [SOURIS]
; The sensitivity of the mouse can | La sensibilité de la souris peut
; take values from 1 to 64. The | prendre des valeurs de 1 à 64. Plus
; smaller values, the faster. | les valeurs sont petites, plus c'est
; | rapide.
X_sensitivity = 1 ; (default 3)
Y_sensitivity = 1 ; (default 3)
; Due to the fact that those stupid | A cause du fait que ces imbéciles de
; mouse drivers' makers don't care | programmeurs de gestionnaires de
; if the mouse moves by steps of 2, | souris se fichent que votre souris se
; 4 or even 8 pixels, we have to | deplace par pas de 2, 4 ou même 8
; stretch the virtual area of the | pixels, nous devons élargir la zone
; mouse and divide coordinates to | virtuelle de la souris et diviser les
; get a one-pixel step motion. | coordonnées pour obtenir un pas de 1.
; (Warning: the mouse movement can | (Attention: le déplacement de la
; be correct in some video modes | souris peut être correct dans certains
; but not in others... But all the | modes vidéos mais pas dans d'autres...
; "Modes X" should behave the same | Mais tout les Modes X devraient se
; way, so you won't have to test | comporter de la même manière, donc
; them all). | vous n'aurez pas à tous les tester.
; A correction factor of 0 means | Un facteur de correction de 0 signifie
; that you are very lucky because | que vous avez de la chace car votre
; your driver doesn't need any | driver n'a pas besoin de correction.
; correction. If you set the | Si vous définissez le facteur de
; correction factor to 1, it means | correction à 1, cela signifie que
; that your mouse moves by steps of | votre souris se déplace par pas de 2
; 2 pixels; 2 for 4; 3 for 8, etc...| pixels; 2 pour 4; 3 pour 8, etc...
; If you want to use GrafX2 in a | Si vous désirez lancer GrafX2 dans une
; Win95 window, you should turn | fenêtre Windows95, vous devriez passer
; these values to 0 (and increase X | ces valeurs à 0 (et augmenter les sen-
; and Y sensitivities above). | sibilités X et Y définies plus haut).
X_correction_factor = 0 ; (default 3)
Y_correction_factor = 0 ; (default 3)
; Aspect of the main cursor (cross) | Aspect du curseur principal (croix)
; 1: Solid | 1: Solide
; 2: Transparent | 2: Transparent
; 3: Thin (solid) | 3: Fin (solide)
Cursor_aspect = 3 ; (default 1)
[MENU] # [MENU]
; Colors of the menus (the black | Couleurs des menus (la couleur noire
; and the white colors cannot be | et la couleur blanche ne peuvent pas
; modified). | être modifiées).
; Values are in {Red,Green,Blue} | Les valeurs sont dans l'ordre {Rouge,
; order and are between 0 and 63. | Vert,Bleu} et vont de 0 à 63.
Light_color = 42,42,42 ; (default 42,42,42)
Dark_color = 27,27,27 ; (default 27,27,27)
;
; Light_color = 24,25,30 ; \_ Nightmare
; Dark_color = 13,14,19 ; /
;
; Light_color = 10,45,28 ; \_ Forest
; Dark_color = 5,27,12 ; /
;
; Light_color = 48,41,26 ; \_ Gold
; Dark_color = 26,22,15 ; /
;
; Light_color = 10,40,55 ; \_ Oceanic
; Dark_color = 10,20,32 ; /
; Aspect ratio and size of the | Proportion des menus et de la barre
; menus and the tool-bar. | d'outils.
; Possible values: | Valeurs possibles:
; 0: Do not adapt (pixels are not | 0: Ne pas adapter (les pixels ne sont
; stretched) | pas étirés)
; 1: Adapt the menus and the tool- | 1: Adapter les menus et la barre
; bar according to the resolution| d'outils suivant la résolution
; 2: Slightly adapt the ratio of | 2: Adapter légèrement les proportions
; the menus and tool-bar | des menus et de la barre d'outils
Menu_ratio = 1 ; (default 1)
; Font: | Police de caractères (fonte):
; 1: Classic | 1: Classique
; 2: Fun | 2: Fun
Font = 2 ; (default 1)
[FILE_SELECTOR] # [SELECTEUR_DE_FICHIERS]
; Show special files and | Afficher les fichiers et répertoires
; directories (values are 'yes' or | spéciaux (les valeurs sont 'yes' ou
; 'no'). | 'no').
Show_hidden_files = no ; (default 'no')
Show_hidden_directories = no ; (default 'no')
Show_system_directories = no ; (default 'no')
; Delay before displaying a preview | Délai avant d'afficher une preview
; in file-selectors (in 18.2th of | dans les sélecteurs de fichiers (en
; second). Possible values range | 18.2èmes de seconde) Les valeurs
; from 1 to 256. | possibles vont de 1 à 256.
Preview_delay = 8 ; (default 8)
; Maximize the preview of the | Maximiser la preview des images pour
; pictures so that it is as big as | qu'elle soit aussi grande que
; possible. If you're not in the | possible.
; same resolution as the picture's | Si vous n'êtes pas dans la même réso-
; one, it can try to correct the | lution que celle de l'image, cela peut
; aspect ratio, but if the picture | essayer de corriger les proportions,
; does not fill the whole screen, | mais si l'image ne prend pas tout
; it can be worse. | l'écran, cela peut être pire.
Maximize_preview = yes ; (default 'no')
; This option is used to place the | Cette option est utilisée pour placer
; selection bar on a filename by | la barre de sélection sur un nom de
; typing its first letters. | fichier en tapant ses 1ères lettres.
; For example, if you want to find | Par exemple, si vous voulez trouver le
; the "PICTURE.PKM" in a directory | fichier "PICTURE.PKM" dans un réper-
; that also contains "PALETTE.PAL", | toire contenant également le fichier
; you'll just have to type P and I. | "PALETTE.PAL", vous n'aurez qu'à taper
; The different values of "FFF" | P puis I.
; indicate if you want to find the | Les different valeurs de "FFF"
; name in both files and directories| indiquent si vous voulez trouvez le nom
; or just in only one of these: | dans les fichiers ET les répertoires ou
; 0: files and directories | simplement dans l'un OU l'autre.
; 1: files only | 0: fichiers et répertoires
; 2: directories only | 1: fichiers seulement
; | 2: répertoires seulement
Find_file_fast = 0 ; (default 0)
[LOADING] # [CHARGEMENT]
; Automatically set the resolution | Passer automatiquement dans la bonne
; when loading a picture. | résolution lors du chargement d'une
; You should set this value to | image.
; 'yes' after disabling the video | Vous devriez définir cette option à
; modes that are not supported by | 'yes' après avoir inhibé les modes
; your video card or monitor. | vidéo qui ne sont pas supportés par
; | votre matériel.
Auto_set_resolution = yes ; (default 'no')
; If the variable above is set to | Si la variable ci-dessus est à 'yes',
; 'yes', this one tells if you want | celle-ci indique si vous voulez
; to set the resolution according | définir la résolution suivant:
; to: | 1: les dimensions de "l'écran
; 1: the internal "original screen" | d'origine" internes à l'image
; dimensions of the picture | 2: les véritables dimensions de
; 2: the actual dimensions of the | l'image
; picture |
Set_resolution_according_to = 1 ; (default 1)
; If you load a picture with a | Si vous chargez une image ayant une
; palette of less than 256 colors, | palette de moins de 256 couleurs,
; this option defines if you want | cette option indique si vous souhaitez
; to clear the palette or to keep | effacer la palette ou bien conserver
; the colors of the previous | les couleurs de l'image précédente qui
; picture that are over the number | se situent au-delà du nombre de la
; of colors of the new picture. | nouvelle image.
; For example, if you load a | Par exemple, si vous chargez une image
; 32-color picture, the colors 32 | de 32 couleurs, les couleurs 32 à 255
; to 255 will be set to black if | seront passées en noir si cette option
; this option is set to 'yes', or | est à 'yes', ou bien elles resteront
; they will be kept unchanged if | inchangées si elle est à 'no'.
; this option is set to 'no'. |
Clear_palette = yes ; (default 'yes')
[MISCELLANEOUS] # [DIVERS]
; Draw the limits of the picture. | Afficher les limites de l'image
Draw_limits = yes ; (default 'yes')
; Adjust the brush grabbing in | Ajuster la capture de brosse en mode
; "grid" mode. | "grille".
Adjust_brush_pick = yes ; (default 'yes')
; Coordinates: | Coordonnées:
; 1: Relative | 1: Relatives
; 2: Absolute | 2: Absolues
Coordinates = 2 ; (default 1)
; Create a backup file when saving. | Créer un fichier backup lors des
; | sauvegardes.
Backup = no ; (default 'no')
; Number of pages stored in memory | Nombre de pages stockées en mémoire
; for "undoing". | destinées à annuler les dernières
; Values are between 1 and 99. | modifications. Valeurs entre 1 et 99.
Undo_pages = 1 ; (default 1)
; Speed of the scroll-bars (in VBLs | Vitesse des barre de défilement (en
; waited) while clicking with the | VBLs attendus) lorsque l'un des
; left or right button of the mouse.| boutons de la souris est enfoncé.
; Values can be between 1 and 255. | Les valeurs sont comprises entre 1 et
; The bigger values, the slower. | 255. Plus elles sont grandes, plus
; | c'est lent.
Gauges_scrolling_speed_Left = 10 ; (default 10)
Gauges_scrolling_speed_Right = 3 ; (default 3)
; Automatically save the configu- | Enregistre automatiquement la configu-
; ration when exiting the program. | ration lorsqu'on quitte le programme.
Auto_save = yes ; (default 'yes')
; Maximum number of vertices used | Nombre maximum de vertex utilisés dans
; in filled polygons and polyforms, | les polygônes et polyformes pleins, et
; and lasso. Possible values range | le lasso. Les valeurs possibles vont
; from 2 to 16384. | de 2 à 16384.
; Each vertex takes 4 bytes. | Chaque vertex prend 4 octets.
Vertices_per_polygon = 1024 ; (default 1024)
; Automatically zoom into the | Zoomer automatiquement la zone pointée
; pointed area when you press the | par la souris lorsque vous appuyez sur
; short-key of the Magnifier button | la touche de raccourci de la loupe.
; while being above the picture. |
Fast_zoom = yes ; (default 'yes')
; Separate the colors in the tool- | Séparer les couleurs dans la barre
; bar by a black squaring. | d'outils par un quadrillage noir.
Separate_colors = no ; (default 'yes')
; Initial value of the feedback for | Valeur initiale du "feedback" pour les
; the drawing modes (cf. docs). | modes de dessin (cf. docs).
FX_feedback = yes ; (default 'yes')
; When you reduce the palette or | Si vous réduisez la palette ou "zappez"
; "zap" some colors out of it, it is| quelques couleurs, il est possible
; possible that there are not enough| qu'il ne reste pas assez de couleurs
; colors left to draw the menus. | pour afficher les menus. Mettre cette
; Switching the following variable | variable à 'yes' ramènera automatiquent
; on will bring back the colors of | les couleurs du menu s'il reste moins
; the menu if there are less than 4 | de 4 couleurs après une "réduction" ou
; colors left after "reducing" or | un "zapping".
; "zapping". |
Safety_colors = no ; (default 'yes')
; Display a message at startup | Afficher un message au démarrage
; telling the version number of the | indiquant le numéro de version du
; program. | programme.
Opening_message = yes ; (default 'yes')
; Take the Stencil into account when| Prendre le Stencil en compte lorsqu'on
; clearing the image. | efface l'image.
Clear_with_stencil = yes ; (default 'yes')
; Directly set the discontinuous | Passer automatiquement en mode de
; freehand drawing mode after brush | dessin discontinu après la prise d'une
; grabbing. | brosse.
Auto_discontinuous = no ; (default 'no')
; Save the screen dimensions in GIF | Sauver les dimensions de l'écran dans
; files. If you want to read these | les fichiers GIF. Si vous voulez lire
; files with Photoshop or Alchemy, | ces fichiers avec Photoshop ou Alchemy,
; and maybe some other programs, you| et peut-être d'autres programmes, vous
; must set this option to 'no'. | devez mettre cette option à 'no'.
Save_screen_size_in_GIF = no ; (default 'no')
; Automaticaly count the number of | Compter automatiquement le nombre de
; different colors used when opening| couleurs différentes utilisées lors de
; the palette editor window. (Set it| d'ouverture de la fenêtre d'édition de
; to 'no' if you have a slow PC or | la palette. (Mettez-le à 'no' si vous
; if you edit huge pictures) | avez un PC lent ou bien si vous éditez
; | d'énormes images).
Auto_nb_colors_used = yes ; (default 'yes')
; Number of the default video mode | Numéro du mode vidéo par défaut au
; at startup (see the list by typing| démarrage (voir la liste en tapant
; "gfx2 /?" at the DOS prompt). | "gfx2 /?" sur la ligne de commande).
Default_video_mode = 0 ; (default 0)

22
graph.c
View File

@ -893,14 +893,27 @@ void Afficher_limites_de_l_image(void)
// Fonction retournant le libellé d'une mode (ex: " 320x200")
char * Libelle_mode(int Mode)
{
static char Chaine[9];
static char Chaine[24];
if (! Mode_video[Mode].Fullscreen)
return "window";
sprintf(Chaine, "%dx%d", Mode_video[Mode].Largeur, Mode_video[Mode].Hauteur);
Num2str(Mode_video[Mode].Largeur,Chaine,4);
Chaine[4]='x';
Num2str(Mode_video[Mode].Hauteur,Chaine+5,3);
return Chaine;
}
// Trouve un mode video à partir d'une chaine: soit "window",
// soit de la forme "320x200"
// Renvoie -1 si la chaine n'est pas convertible
int Conversion_argument_mode(const char *Argument)
{
// Je suis paresseux alors je vais juste tester les libellés
int Indice_mode;
for (Indice_mode=0; Indice_mode<Nb_modes_video; Indice_mode++)
if (!stricmp(Libelle_mode(Indice_mode), Argument))
return Indice_mode;
return -1;
}
//--------------------- Initialisation d'un mode vidéo -----------------------
@ -1000,7 +1013,6 @@ void Initialiser_mode_video(int Largeur, int Hauteur, int Fullscreen)
break;
}
}
//Resolution_actuelle = ?
Menu_Taille_couleur = ((Largeur_ecran/Menu_Facteur_X)-(LARGEUR_MENU+2)) >> 3;
Menu_Ordonnee = Hauteur_ecran;

View File

@ -27,6 +27,7 @@ void Calculer_limites(void);
void Calculer_coordonnees_pinceau(void);
char* Libelle_mode(int Mode);
int Conversion_argument_mode(const char *Argument);
void Initialiser_mode_video(int Largeur, int Hauteur, int Fullscreen);
void Pixel_dans_barre_d_outil(word X,word Y,byte Couleur);

166
main.c
View File

@ -39,69 +39,14 @@ byte Ancien_nb_lignes; // Ancien nombre de lignes de l'
//--- Affichage de la syntaxe, et de la liste des modes vidéos disponibles ---
void Afficher_syntaxe(void)
{
printf("Syntax: GFX2 [<picture>] [<Video mode number>|<Help>]\n\n");
printf("<Help> can be /? or /h\n\n");
printf("Available video modes:\nÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ\n");
printf("\t 0:%s",Libelle_mode(0));
printf("\t15:%s",Libelle_mode(15));
printf("\t30:%s",Libelle_mode(30));
printf("\t45:%s\n",Libelle_mode(45));
printf("\t 1:%s",Libelle_mode(1));
printf("\t16:%s",Libelle_mode(16));
printf("\t31:%s",Libelle_mode(31));
printf("\t46:%s\n",Libelle_mode(46));
printf("\t 2:%s",Libelle_mode(2));
printf("\t17:%s",Libelle_mode(17));
printf("\t32:%s",Libelle_mode(32));
printf("\t47:%s\n",Libelle_mode(47));
printf("\t 3:%s",Libelle_mode(3));
printf("\t18:%s",Libelle_mode(18));
printf("\t33:%s",Libelle_mode(33));
printf("\t48:%s\n",Libelle_mode(48));
printf("\t 4:%s",Libelle_mode(4));
printf("\t19:%s",Libelle_mode(19));
printf("\t34:%s",Libelle_mode(34));
printf("\t49:%s\n",Libelle_mode(49));
printf("\t 5:%s",Libelle_mode(5));
printf("\t20:%s",Libelle_mode(20));
printf("\t35:%s",Libelle_mode(35));
printf("\t50:%s\n",Libelle_mode(50));
printf("\t 6:%s",Libelle_mode(6));
printf("\t21:%s",Libelle_mode(21));
printf("\t36:%s",Libelle_mode(36));
printf("\t51:%s\n",Libelle_mode(51));
printf("\t 7:%s",Libelle_mode(7));
printf("\t22:%s",Libelle_mode(22));
printf("\t37:%s",Libelle_mode(37));
printf("\t52:%s\n",Libelle_mode(52));
printf("\t 8:%s",Libelle_mode(8));
printf("\t23:%s",Libelle_mode(23));
printf("\t38:%s",Libelle_mode(38));
printf("\t53:%s\n",Libelle_mode(53));
printf("\t 9:%s",Libelle_mode(9));
printf("\t24:%s",Libelle_mode(24));
printf("\t39:%s",Libelle_mode(39));
printf("\t54:%s\n",Libelle_mode(54));
printf("\t10:%s",Libelle_mode(10));
printf("\t25:%s",Libelle_mode(25));
printf("\t40:%s",Libelle_mode(40));
printf("\t55:%s\n",Libelle_mode(55));
printf("\t11:%s",Libelle_mode(11));
printf("\t26:%s",Libelle_mode(26));
printf("\t41:%s",Libelle_mode(41));
printf("\t56:%s\n",Libelle_mode(56));
printf("\t12:%s",Libelle_mode(12));
printf("\t27:%s",Libelle_mode(27));
printf("\t42:%s",Libelle_mode(42));
printf("\t57:%s\n",Libelle_mode(57));
printf("\t13:%s",Libelle_mode(13));
printf("\t28:%s",Libelle_mode(28));
printf("\t43:%s",Libelle_mode(43));
printf("\t58:%s\n",Libelle_mode(58));
printf("\t14:%s",Libelle_mode(14));
printf("\t29:%s",Libelle_mode(29));
printf("\t44:%s",Libelle_mode(44));
printf("\t59:%s\n",Libelle_mode(59));
int Indice_mode;
printf("Syntax: GFX2 [<arguments>] [<picture>]\n\n");
printf("<arguments> can be:]\n");
printf("\t/? /h /help for this help screen\n");
printf("\t/mode <videomode> to set a video mode\n\n");
printf("Available video modes:\n\n");
for (Indice_mode=0; Indice_mode<Nb_modes_video; Indice_mode++)
printf("\t%s\n",Libelle_mode(Indice_mode));
}
@ -152,9 +97,6 @@ void Erreur_fonction(int Code, const char *Nom_fichier, int Numero_ligne, const
printf("This also requires 16 free Megabytes on your disk to create the memory cache.\n");
printf("This will slow down the program but, at least, you'll get GrafX2 running.\n");
break;
case ERREUR_LIGNE_COMMANDE : printf("Error: Too many parameters.\n\n");
Afficher_syntaxe();
break;
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;
@ -163,7 +105,7 @@ void Erreur_fonction(int Code, const char *Nom_fichier, int Numero_ligne, const
printf("enabled mode, then enter the resolution menu and enable the mode you want.\n");
printf("Check also if the 'Default_video_mode' parameter in GFX2.INI is correct.\n");
break;
case ERREUR_NUMERO_MODE : printf("Error: Invalid parameter or file not found.\n\n");
case ERREUR_LIGNE_COMMANDE : printf("Error: Invalid parameter or file not found.\n\n");
Afficher_syntaxe();
break;
case ERREUR_SAUVEGARDE_CFG : printf("Error: Write error while saving settings!\n");
@ -186,37 +128,76 @@ void Erreur_fonction(int Code, const char *Nom_fichier, int Numero_ligne, const
}
}
// --------------------- Analyse de la ligne de commande ---------------------
void Analyse_de_la_ligne_de_commande(int argc,char * argv[])
{
byte Option2=1;
char *Buffer ;
int Indice;
Un_fichier_a_ete_passe_en_parametre=0;
Une_resolution_a_ete_passee_en_parametre=0;
switch (argc)
{
case 1 : // Mode par défaut
Resolution_actuelle=Config.Resolution_par_defaut;
break;
case 2 :
case 3 :
if (Fichier_existe(argv[1]))
for (Indice=1; Indice<argc; Indice++)
{
if ( !strcmp(argv[Indice],"/?") ||
!strcmp(argv[Indice],"/h") ||
!strcmp(argv[Indice],"/H") )
{
// help
Afficher_syntaxe();
exit(0);
}
else if ( !strcmp(argv[Indice],"/mode") )
{
// mode
Indice++;
if (Indice<argc)
{
Une_resolution_a_ete_passee_en_parametre = 1;
Resolution_actuelle=Conversion_argument_mode(argv[Indice]);
if (Resolution_actuelle == -1)
{
Erreur(ERREUR_LIGNE_COMMANDE);
Afficher_syntaxe();
exit(0);
}
if ((Mode_video[Resolution_actuelle].Etat & 0x7F) == 3)
{
Erreur(ERREUR_MODE_INTERDIT);
exit(0);
}
}
else
{
Erreur(ERREUR_LIGNE_COMMANDE);
Afficher_syntaxe();
exit(0);
}
}
else
{
// Si ce n'est pas un paramètre, c'est le nom du fichier à ouvrir
if (Un_fichier_a_ete_passe_en_parametre)
{
// plusieurs noms de fichier en argument
Erreur(ERREUR_LIGNE_COMMANDE);
Afficher_syntaxe();
exit(0);
}
else if (Fichier_existe(argv[Indice]))
{
Un_fichier_a_ete_passe_en_parametre=1;
Option2=2;
// On récupère le chemin complet du paramètre
// Et on découpe ce chemin en répertoire(path) + fichier(.ext)
#ifdef __linux__
Buffer=realpath(argv[1],NULL);
Buffer=realpath(argv[Indice],NULL);
#else
Buffer = malloc(TAILLE_CHEMIN_FICHIER);
_fullpath(Buffer,argv[1],TAILLE_CHEMIN_FICHIER);
_fullpath(Buffer,argv[Indice],TAILLE_CHEMIN_FICHIER);
#endif
Extraire_chemin(Principal_Repertoire_fichier, Buffer);
Extraire_nom_fichier(Principal_Nom_fichier, Buffer);
@ -227,37 +208,12 @@ void Analyse_de_la_ligne_de_commande(int argc,char * argv[])
}
else
{
if (argc==3)
Erreur(ERREUR_NUMERO_MODE);
}
if (Option2<argc)
{
if ( (!strcmp(argv[Option2],"/?")) ||
(!strcmp(argv[Option2],"/h")) ||
(!strcmp(argv[Option2],"/H")) )
{
Passer_en_mode_texte(Ancien_nb_lignes);
Clavier_de_depart();
Erreur(ERREUR_LIGNE_COMMANDE);
Afficher_syntaxe();
exit(0);
}
/*
Resolution_actuelle=Str2num(argv[Option2]); // Mode désiré par l'utilisateur
if ( (Resolution_actuelle<MODE_320_200) || (Resolution_actuelle>MODE_1024_768) )
Erreur(ERREUR_NUMERO_MODE);
Une_resolution_a_ete_passee_en_parametre=Un_fichier_a_ete_passe_en_parametre;
*/
}
break;
default:
// Erreur: trop de paramètres sur la ligne de commande
Erreur(ERREUR_LIGNE_COMMANDE);
}
if ((Mode_video[Resolution_actuelle].Etat & 0x7F) == 3)
Erreur(ERREUR_MODE_INTERDIT);
}
// ------------------------ Initialiser le programme -------------------------

View File

@ -4,6 +4,7 @@
#include <ctype.h>
#include "const.h"
#include "global.h"
#include "graph.h"
void Charger_INI_Clear_string(char * String)
{
@ -108,7 +109,61 @@ int Charger_INI_Reach_group(FILE * File,char * Buffer,char * Group)
return 0;
}
int Charger_INI_Get_string(FILE * File,char * Buffer,char * Option,char * Retour)
{
int Arret;
char * Option_upper;
char * Buffer_upper;
int Indice_buffer;
// On alloue les zones de mémoire:
Option_upper=(char *)malloc(1024);
Buffer_upper=(char *)malloc(1024);
// On commence par se faire une version majuscule de l'option à rechercher:
strcpy(Option_upper,Option);
Charger_INI_Clear_string(Option_upper);
Arret=0;
do
{
// On lit une ligne dans le fichier:
if (fgets(Buffer,1024,File)==0)
{
free(Buffer_upper);
free(Option_upper);
return ERREUR_INI_CORROMPU;
}
Ligne_INI++;
// On s'en fait une version en majuscule:
strcpy(Buffer_upper,Buffer);
Charger_INI_Clear_string(Buffer_upper);
// On compare la chaîne avec l'option recherchée:
Arret=Charger_INI_Seek_pattern(Buffer_upper,Option_upper);
// Si on l'a trouvée:
if (Arret)
{
// On se positionne juste après la chaîne "="
Indice_buffer=Charger_INI_Seek_pattern(Buffer_upper,"=");
strcpy(Retour, Buffer_upper + Indice_buffer);
// On coupe la chaine au premier espace ou ; (commentaire)
for (Indice_buffer=0; Retour[Indice_buffer]!='\0' && Retour[Indice_buffer]!=' ' && Retour[Indice_buffer]!=';'; Indice_buffer++)
;
Retour[Indice_buffer]='\0';
}
}
while (!Arret);
free(Buffer_upper);
free(Option_upper);
return 0;
}
int Charger_INI_Get_value(char * String,int * Index,int * Value)
{
@ -317,6 +372,7 @@ int Charger_INI(struct S_Config * Conf)
//int Indice;
char * Nom_du_fichier;
int Retour;
char Libelle_resolution[1024];
Ligne_INI=0;
@ -604,11 +660,25 @@ int Charger_INI(struct S_Config * Conf)
goto Erreur_ERREUR_INI_CORROMPU;
Conf->Auto_nb_used=Valeurs[0];
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))
goto Erreur_ERREUR_INI_CORROMPU;
Conf->Resolution_par_defaut=Valeurs[0];
// Optionnel, le mode video par défaut (à partir de beta 97.0%)
Conf->Resolution_par_defaut=0;
if (!Charger_INI_Get_string (Fichier,Buffer,"Default_video_mode",Libelle_resolution))
{
int Mode = Conversion_argument_mode(Libelle_resolution);
if (Mode>=0)
Conf->Resolution_par_defaut=Mode;
}
// Optionnel, les dimensions de la fenêtre (à partir de beta 97.0%)
Mode_video[0].Largeur = 640;
Mode_video[0].Hauteur = 480;
if (!Charger_INI_Get_values (Fichier,Buffer,"Default_window_size",2,Valeurs))
{
if ((Valeurs[0]>=320))
Mode_video[0].Largeur = Valeurs[0];
if ((Valeurs[1]>=200))
Mode_video[0].Hauteur = Valeurs[1];
}
fclose(Fichier);

113
saveini.c
View File

@ -6,6 +6,7 @@
#include "readini.h"
#include "files.h"
#include "erreurs.h"
#include "graph.h"
int Sauver_INI_Reach_group(FILE * Old_file,FILE * New_file,char * Buffer,char * Group)
{
@ -173,7 +174,111 @@ void Sauver_INI_Set_value(char * Destination,char * Source,int Nb_values_to_set,
}
}
void Sauver_INI_Set_string(char * Destination,char * Source,char * Value)
{
int Indice_destination;
int Indice_source;
// On commence par recopier tout jusqu'au symbole '=':
for (Indice_source=0;Source[Indice_source]!='=';Indice_source++)
Destination[Indice_source]=Source[Indice_source];
// Puis on recopie le symbole '=':
Destination[Indice_source]=Source[Indice_source];
Indice_source++;
// Puis on recopie tous les espaces qui suivent:
for (;Source[Indice_source]==' ';Indice_source++)
Destination[Indice_source]=Source[Indice_source];
// Pour l'instant, la source et la destination en sont au même point:
Indice_destination=Indice_source;
// Dans la destination, on écrit la valeur:
strcpy(Destination+Indice_destination,Value);
Indice_destination+=strlen(Value);
// Dans la source, on saute la valeur:
for (;Sauver_INI_char_in_value_alphabet(Source[Indice_source]) && (Source[Indice_source]!='\0');Indice_source++);
// On recopie toute la fin de la ligne:
for (;Source[Indice_source]!='\0';Indice_source++,Indice_destination++)
Destination[Indice_destination]=Source[Indice_source];
// Et on n'oublie pas d'y mettre l''\0':
Destination[Indice_destination]='\0';
}
int Sauver_INI_Set_strings(FILE * Old_file,FILE * New_file,char * Buffer,char * Option,char * Value)
{
int Arret;
char * Option_upper;
char * Buffer_upper;
char * Buffer_resultat;
//int Indice_buffer;
// On alloue les zones de mémoire:
Option_upper=(char *)malloc(1024);
Buffer_upper=(char *)malloc(1024);
Buffer_resultat=(char *)malloc(1024);
// On commence par se faire une version majuscule de l'option à rechercher:
strcpy(Option_upper,Option);
Charger_INI_Clear_string(Option_upper);
Arret=0;
do
{
// On lit une ligne dans le fichier:
if (fgets(Buffer,1024,Old_file)==0)
{
free(Buffer_resultat);
free(Buffer_upper);
free(Option_upper);
return ERREUR_INI_CORROMPU;
}
// On s'en fait une version en majuscule:
strcpy(Buffer_upper,Buffer);
Charger_INI_Clear_string(Buffer_upper);
// On compare la chaîne avec l'option recherchée:
Arret=Charger_INI_Seek_pattern(Buffer_upper,Option_upper);
if (Arret)
{
// On l'a trouvée:
Sauver_INI_Set_string(Buffer_resultat,Buffer,Value);
if (fprintf(New_file,"%s",Buffer_resultat)<0)
{
free(Buffer_resultat);
free(Buffer_upper);
free(Option_upper);
return ERREUR_SAUVEGARDE_INI;
}
}
else
{
// On l'a pas trouvée:
if (fprintf(New_file,"%s",Buffer)<0)
{
free(Buffer_resultat);
free(Buffer_upper);
free(Option_upper);
return ERREUR_SAUVEGARDE_INI;
}
}
}
while (Arret==0);
free(Buffer_resultat);
free(Buffer_upper);
free(Option_upper);
return 0;
}
int Sauver_INI_Set_values(FILE * Old_file,FILE * New_file,char * Buffer,char * Option,int Nb_values_to_set,int * Values,int Litteral)
{
@ -474,8 +579,12 @@ int Sauver_INI(struct S_Config * Conf)
if ((Retour=Sauver_INI_Set_values (Ancien_fichier,Nouveau_fichier,Buffer,"Auto_nb_colors_used",1,Valeurs,1)))
goto Erreur_Retour;
Valeurs[0]=Conf->Resolution_par_defaut;
if ((Retour=Sauver_INI_Set_values (Ancien_fichier,Nouveau_fichier,Buffer,"Default_video_mode",1,Valeurs,0)))
if ((Retour=Sauver_INI_Set_strings (Ancien_fichier,Nouveau_fichier,Buffer,"Default_video_mode",Libelle_mode(Conf->Resolution_par_defaut))))
goto Erreur_Retour;
Valeurs[0]=Mode_video[0].Largeur;
Valeurs[1]=Mode_video[0].Hauteur;
if ((Retour=Sauver_INI_Set_values (Ancien_fichier,Nouveau_fichier,Buffer,"Default_window_size",2,Valeurs,0)))
goto Erreur_Retour;
Sauver_INI_Flush(Ancien_fichier,Nouveau_fichier,Buffer);