/* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2007 Adrien Destugues
Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud)
Grafx2 is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; version 2
of the License.
Grafx2 is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Grafx2; if not, see or
write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#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;
}