#define VARIABLES_GLOBALES #include "const.h" #include "struct.h" #include "global.h" #include "graph.h" #include "divers.h" #include "init.h" #include "boutons.h" #include "moteur.h" #include #include #include #include #include #include #include #include "pages.h" #include "files.h" #include "loadsave.h" #include "sdlscreen.h" #include "erreurs.h" #include "readini.h" #include "saveini.h" #include "linux.h" #include "io.h" #ifndef __linux__ #include #include #define chdir(dir) SetCurrentDirectory(dir) #define M_PI 3.14159265358979323846 #endif byte Ancien_nb_lignes; // Ancien nombre de lignes de l'écran //--- Affichage de la syntaxe, et de la liste des modes vidéos disponibles --- void Afficher_syntaxe(void) { int Indice_mode; printf("Syntax: GFX2 [] []\n\n"); printf(" can be:]\n"); printf("\t/? /h /help for this help screen\n"); printf("\t/mode to set a video mode\n\n"); printf("Available video modes:\n\n"); for (Indice_mode=0; Indice_mode=MODE_VESA) Mode_video[Temp].Etat+=128; } }*/ Analyse_de_la_ligne_de_commande(argc,argv); Mode_dans_lequel_on_demarre=Resolution_actuelle; Buffer_de_ligne_horizontale=NULL; Resolution_actuelle=-1; // On n'était pas dans un mode graphique Initialiser_mode_video( Mode_video[Mode_dans_lequel_on_demarre].Largeur, Mode_video[Mode_dans_lequel_on_demarre].Hauteur, Mode_video[Mode_dans_lequel_on_demarre].Fullscreen); Principal_Largeur_image=Largeur_ecran; Principal_Hauteur_image=Hauteur_ecran; Brouillon_Largeur_image=Largeur_ecran; Brouillon_Hauteur_image=Hauteur_ecran; // Allocation de mémoire pour les différents écrans virtuels (et brosse) if (Initialiser_les_listes_de_backups_en_debut_de_programme(Config.Nb_pages_Undo+1,Largeur_ecran,Hauteur_ecran)==0) Erreur(ERREUR_MEMOIRE); // On remet le nom par défaut pour la page de brouillon car il été modifié // par le passage d'un fichier en paramètre lors du traitement précédent. // Note: le fait que l'on ne modifie que les variables globales // Brouillon_* et pas les infos contenues dans la page de brouillon // elle-même ne m'inspire pas confiance mais ça a l'air de marcher sans // poser de problèmes, alors... if (Un_fichier_a_ete_passe_en_parametre) { strcpy(Brouillon_Repertoire_fichier,Brouillon_Repertoire_courant); strcpy(Brouillon_Nom_fichier,"NO_NAME.PKM"); Brouillon_Format_fichier=FORMAT_PAR_DEFAUT; } // Nettoyage de l'écran virtuel (les autres recevront celui-ci par copie) memset(Principal_Ecran,0,Principal_Largeur_image*Principal_Hauteur_image); // Initialisation de diverses variables par calcul: Calculer_donnees_loupe(); Calculer_limites(); Calculer_coordonnees_pinceau(); // On affiche le menu: Afficher_menu(); Afficher_pinceau_dans_menu(); // On affiche le curseur pour débutter correctement l'état du programme: Afficher_curseur(); Brouillon_Image_modifiee=0; Principal_Image_modifiee=0; // Le programme débute en mode de dessin à la main Enclencher_bouton(BOUTON_DESSIN,A_GAUCHE); // On initialise la brosse initiale à 1 pixel blanc: Brosse_Largeur=1; Brosse_Hauteur=1; Capturer_brosse(0,0,0,0,0); *Brosse=CM_Blanc; } // ------------------------- Fermeture du programme -------------------------- void Fermeture_du_programme(void) { int Retour; // On libère le buffer de gestion de lignes free(Buffer_de_ligne_horizontale); // On libère le pinceau spécial free(Pinceau_Sprite); // On libère la table précalculée des distances de teintes free(MC_Table_differences); // On libère les différents écrans virtuels et brosse: free(Brosse); Nouveau_nombre_de_backups(0); free(Brouillon_Ecran); free(Principal_Ecran); Passer_en_mode_texte(Ancien_nb_lignes); Clavier_de_depart(); // On prend bien soin de passer dans le répertoire initial: if (chdir(Repertoire_initial)!=-1) { // On sauvegarde les données dans le .CFG et dans le .INI if (Config.Auto_save) { Retour=Sauver_CFG(); if (Retour) Erreur(Retour); Retour=Sauver_INI(&Config); if (Retour) Erreur(Retour); } } else Erreur(ERREUR_REPERTOIRE_DISPARU); } // -------------------------- Procédure principale --------------------------- int main(int argc,char * argv[]) { Initialisation_du_programme(argc,argv); if (Config.Opening_message && (!Un_fichier_a_ete_passe_en_parametre)) Bouton_Message_initial(); free(Logo_GrafX2); if (Un_fichier_a_ete_passe_en_parametre) { Bouton_Reload(); Une_resolution_a_ete_passee_en_parametre=0; } Gestion_principale(); Fermeture_du_programme(); return 0; }