grafX2/const.h
Yves Rizoud acfe5836ce Grafx2 can now read and convert gfx2.cfg from the original DOS (96.5%) format.
Older .cfg files in svn were saved incorrectly: the wrong size of chunk #5
(0x0101 instead of 0xE1) made it impossible to re-read the file in gfxcfg.

gfxcfg can read and save gfx2.cfg. Upward compatibility is provided:
- If new chunk types are added to the format, it only needs a re-compile. Older
files can be read and saved.
- If new keyboard shortcuts are added (134 currently), the older files can be
read and the default shortcut will be used for missing keys.

Fixed many endianness cases, hopefully
Fixed LBM loading : bug in ASM->C conversion of Couleur_ILBM_line()
Broke PCX loading : argh!


git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@176 416bcca6-2ee7-4201-b75f-2eb2f807beb1
2008-09-29 23:15:08 +00:00

455 lines
15 KiB
C

#ifndef _CONST_H_
#define _CONST_H_
// Déclaration des constantes ////////////////////////////////////////////////
#define M_2PI 6.28318530717958647692528676656
// Note: La taille du fichier GFX2.DAT est définie au début de INIT.C !
#define POURCENTAGE_VERSION "97.0%" // Libellé du pourcentage de la version ß
#define VERSION1 2 // |
#define VERSION2 0 // |_ Numéro de version découpé en
#define BETA1 97 // | plusieurs parties => 2.0 ß95.5%
#define BETA2 0 // |
#define ALPHA_BETA "ß" // Type de la version "Þ" ou "ß"
#define TAILLE_FICHIER_CONFIG 10351 // Taille du fichier GFX2.CFG
#define DAT_DEBUT_INI_PAR_DEFAUT 0xF385 // Dans gfx2.dat, début du fichier gfx2.ini standard
#define NB_MODES_VIDEO 60 // Nombre de modes vidéo
#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
#define NB_OPERATIONS 32 // Nombre d'opérations gérées par le moteur
#define NB_FACTEURS_DE_ZOOM 12 // Nombre de facteurs de zoom
#define LARGEUR_MENU 254 // Largeur du menu en taille réelle
#define HAUTEUR_MENU 44 // Hauteur du menu en taille réelle
#define NB_SPRITES_CURSEUR 8 // Nombre de sprites de curseur
#define LARGEUR_SPRITE_CURSEUR 15 // Largeur d'un sprite de curseur en pixels
#define HAUTEUR_SPRITE_CURSEUR 15 // Hauteur d'un sprite de curseur en pixels
#define NB_SPRITES_EFFETS 9 // Nombre de sprites d'effets
#define NB_SPRITES_MENU 9 // Nombre de sprites de menu
#define LARGEUR_SPRITE_MENU 14 // Largeur d'un sprite de menu en pixels
#define HAUTEUR_SPRITE_MENU 14 // Hauteur d'un sprite de menu en pixels
#define LARGEUR_PINCEAU 16 // Largeur d'un sprite de pinceau prédéfini
#define HAUTEUR_PINCEAU 16 // Hauteur d'un sprite de pinceau prédéfini
#define TAILLE_MAXI_PINCEAU 127 // Taille maxi des pinceaux
#define NB_SPRITES_DRIVES 5 // Nombre de sprites de drives
#define LARGEUR_SPRITE_DRIVE 7 // Largeur d'un sprite de drive en pixels
#define HAUTEUR_SPRITE_DRIVE 7 // Hauteur d'un sprite de drive en pixels
#define NB_SPRITES_PINCEAU 48 // Nombre de sprites de pinceau
#define NB_TRAMES_PREDEFINIES 12 // Nombre de trames prédéfinies
#define TAILLE_PILE_OPERATIONS 16 // Nombre maximum d'éléments utilisés par les opérations
#define TAILLE_MAXI_PATH 37 // Taille maximum affichable du répertoire courant dans les fenêtres du fileselect
#define TAILLE_COMMENTAIRE 32 // Taille maxi des commentaires pour le PKM
#define TAILLE_NOM_CONSTRUCTEUR 24 // Taille maxi du nom de constructeur VESA dans la fenêtre de stats.
#define NB_PAGES_UNDO_MAX 99 // Nombre maximal de pages d'undo
#define FACTEUR_DE_ZOOM_PAR_DEFAUT 4 // Facteur de zoom initial
#define NB_SECTIONS_AIDE 3 // Nombre de sections dans l'aide
#define TAILLE_CHEMIN_FICHIER 260 // Le nombre de caractères maxi pour un nom de fichier avec chemin complet
// Caractères présents dans les deux fontes
#define CARACTERE_TRIANGLE_DROIT 16
#define CARACTERE_TRIANGLE_GAUCHE 17
// On impose à l'allocation dynamique des pages de backups de conserver un
// minimum de 256 Ko pour que le reste du programme puisse continuer à
// fonctionner.
#define QUANTITE_MINIMALE_DE_MEMOIRE_A_CONSERVER (256*1024)
#define A_GAUCHE 1 // Indique une direction (ou click) à gauche
#define A_DROITE 2 // Indique une direction (ou click) à droite
#define LARGEUR_BARRE_SPLIT 6 // [ Û±±° ]
#define PROPORTION_SPLIT 0.3 // proportion de la zone non-zoomée en largeur par rapport à l'écran
#define NB_PIXELS_ZOOMES_MIN 4 // Nombre minimal de pixels zoomés en largeur (Note: En dessous de 4, on ne peut plus scroller!)
// Les différents formats de fichiers:
#define NB_FORMATS_CONNUS 12 // Nombre de formats connus (devrait être la valeur maximale de NB_FORMATS_LOAD et NB_FORMATS_SAVE, mais plus généralement: Card({NB_FORMATS_LOAD} UNION {NB_FORMATS_SAVE}))
#define NB_FORMATS_LOAD 12 // Nombre de formats que l'on sait charger
#define NB_FORMATS_SAVE 12 // Nombre de formats que l'on sait sauver
enum FORMATS_RECONNUS
{
FORMAT_PKM=1, // |
FORMAT_LBM, // |
FORMAT_GIF, // | Il faudra penser à réordonner
FORMAT_BMP, // | les données sur les formats dans
FORMAT_PCX, // | GLOBAL.H si on modifie ces cons-
FORMAT_IMG, // |_ tantes.
FORMAT_SCx, // |
FORMAT_PI1, // | Elles représentent l'indice où
FORMAT_PC1, // | l'on doit aller piocher ces
FORMAT_CEL, // | données.
FORMAT_KCF, // |
FORMAT_PAL // |
};
#define FORMAT_PAR_DEFAUT FORMAT_PKM // Format par défaut (ah bon? oh!)
// Les différentes erreurs:
enum CODES_D_ERREURS
{
ERREUR_DAT_ABSENT=1, // Le fichier GFX2.DAT est absent
ERREUR_DAT_CORROMPU, // Mauvais fichier GFX2.DAT
ERREUR_CFG_ABSENT, // Le fichier GFX2.CFG est absent
ERREUR_CFG_CORROMPU, // Mauvais fichier GFX2.CFG
ERREUR_CFG_ANCIEN, // Ancienne version du fichier GFX2.CFG
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
ERREUR_REPERTOIRE_DISPARU, // Le répertoire de lancement n'existe plus
ERREUR_INI_CORROMPU, // Le fichier GFX2.INI est corrompu
ERREUR_SAUVEGARDE_INI, // Le fichier GFX2.INI n'est pas inscriptible
ERREUR_SORRY_SORRY_SORRY // On le refera plus, promis
};
// Les différents types de modes vidéos
enum TYPES_DE_MODES_VIDEO
{
MODE_SDL
/*MODE_MCGA,
MODE_X,
MODE_VESA, // Attention! Si on change la numérotation, il faut
MODE_XVESA // que les 2 plus grandes valeurs soient ces 2 modes!*/
};
// Les différents modes vidéos (avec leur nø d'ordre)
enum MODES_VIDEO
{
MODE_320_200, // !!! MODE 0 !!!
MODE_320_224,
MODE_320_240,
MODE_320_256,
MODE_320_270,
MODE_320_282,
MODE_320_300,
MODE_320_360,
MODE_320_400,
MODE_320_448,
MODE_320_480,
MODE_320_512,
MODE_320_540,
MODE_320_564,
MODE_320_600,
MODE_360_200, // 15
MODE_360_224,
MODE_360_240,
MODE_360_256,
MODE_360_270,
MODE_360_282,
MODE_360_300,
MODE_360_360,
MODE_360_400,
MODE_360_448,
MODE_360_480,
MODE_360_512,
MODE_360_540,
MODE_360_564,
MODE_360_600,
MODE_400_200, // 30
MODE_400_224,
MODE_400_240,
MODE_400_256,
MODE_400_270,
MODE_400_282,
MODE_400_300,
MODE_400_360,
MODE_400_400,
MODE_400_448,
MODE_400_480,
MODE_400_512,
MODE_400_540,
MODE_400_564,
MODE_400_600,
MODE_640_224, // 45
MODE_640_240,
MODE_640_256,
MODE_640_270,
MODE_640_300,
MODE_640_350,
MODE_640_400,
MODE_640_448,
MODE_640_480,
MODE_640_512,
MODE_640_540,
MODE_640_564,
MODE_640_600,
MODE_800_600,
MODE_1024_768 // 59
};
// Les différentes catégories de bouton:
enum FAMILLES_DE_BOUTONS
{
FAMILLE_OUTIL=1, // Outils de dessin
FAMILLE_INTERRUPTION, // Opération éphémère
FAMILLE_INSTANTANE, // Pif paf
FAMILLE_TOOLBAR, // Cache/Montre la barre d'outils
FAMILLE_EFFETS // Effets
};
// Les différentes formes de bouton:
enum FORMES_DE_BOUTONS
{
FORME_BOUTON_SANS_CADRE, // Ex: la palette
FORME_BOUTON_RECTANGLE, // Ex: la plupart
FORME_BOUTON_TRIANGLE_HAUT_GAUCHE, // Ex: Rectangles vides
FORME_BOUTON_TRIANGLE_BAS_DROITE // Ex: Rectangles pleins
};
// Les différentes formes de curseur:
enum FORMES_DE_CURSEUR
{
FORME_CURSEUR_FLECHE,
FORME_CURSEUR_CIBLE, // Utilise le pinceau
FORME_CURSEUR_CIBLE_PIPETTE, // Utilise le pinceau
FORME_CURSEUR_SABLIER,
FORME_CURSEUR_MULTIDIRECTIONNEL,
FORME_CURSEUR_HORIZONTAL,
FORME_CURSEUR_CIBLE_FINE, // Utilise le pinceau
FORME_CURSEUR_CIBLE_PIPETTE_FINE, // Utilise le pinceau
FORME_CURSEUR_CIBLE_XOR,
FORME_CURSEUR_RECTANGLE_XOR,
FORME_CURSEUR_ROTATE_XOR
};
// Les différentes formes de pinceaux (les types de pinceaux doivent être au début)
enum FORMES_DE_PINCEAUX
{
FORME_PINCEAU_ROND,
FORME_PINCEAU_CARRE,
FORME_PINCEAU_BARRE_HORIZONTALE,
FORME_PINCEAU_BARRE_VERTICALE,
FORME_PINCEAU_SLASH,
FORME_PINCEAU_ANTISLASH,
FORME_PINCEAU_ALEATOIRE,
FORME_PINCEAU_X,
FORME_PINCEAU_PLUS,
FORME_PINCEAU_LOSANGE,
FORME_PINCEAU_ROND_TRAME,
FORME_PINCEAU_CARRE_TRAME,
FORME_PINCEAU_DIVERS,// Ce doit être le dernier des types de pinceaux, comme ça il indique le nombre de types de pinceaux (-1)
FORME_PINCEAU_POINT, // Utilisé pour réduire de pinceau à 1 point dans certaines opérations
FORME_PINCEAU_BROSSE_COULEUR,
FORME_PINCEAU_BROSSE_MONOCHROME
};
// Les différents états de bouton:
#define BOUTON_RELACHE 0
#define BOUTON_ENFONCE 1
// Les différents modes de Shade
enum MODES_DE_SHADE
{
MODE_SHADE_NORMAL,
MODE_SHADE_BOUCLE,
MODE_SHADE_NOSAT
};
// Les différents chunks du fichier .CFG
enum CHUNKS_CFG
{
CHUNK_TOUCHES = 0,
CHUNK_MODES_VIDEO = 1,
CHUNK_SHADE = 2,
CHUNK_MASQUE = 3,
CHUNK_STENCIL = 4,
CHUNK_DEGRADES = 5,
CHUNK_SMOOTH = 6,
CHUNK_EXCLUDE_COLORS = 7,
CHUNK_QUICK_SHADE = 8,
CHUNK_MAX
};
// Les différents types de lecteurs:
enum TYPES_DE_LECTEURS
{
LECTEUR_FLOPPY_3_5, // 0: Diskette 3"«
LECTEUR_FLOPPY_5_25, // 1: Diskette 5"¬
LECTEUR_HDD, // 2: HDD
LECTEUR_CDROM, // 3: CD-ROM
LECTEUR_NETWORK // 4: Logique (réseau?)
};
// Les différents boutons:
enum NUMEROS_DE_BOUTONS
{
BOUTON_PINCEAUX,
BOUTON_AJUSTER,
BOUTON_DESSIN,
BOUTON_COURBES,
BOUTON_LIGNES,
BOUTON_SPRAY,
BOUTON_FLOODFILL,
BOUTON_POLYGONES,
BOUTON_POLYFILL,
BOUTON_RECTANGLES,
BOUTON_FILLRECT,
BOUTON_CERCLES,
BOUTON_FILLCERC,
BOUTON_GRADRECT,
BOUTON_GRADMENU,
BOUTON_SPHERES,
BOUTON_BROSSE,
BOUTON_POLYBROSSE,
BOUTON_EFFETS_BROSSE,
BOUTON_EFFETS,
BOUTON_TEXTE,
BOUTON_LOUPE,
BOUTON_PIPETTE,
BOUTON_RESOL,
BOUTON_PAGE,
BOUTON_SAUVER,
BOUTON_CHARGER,
BOUTON_PARAMETRES,
BOUTON_CLEAR,
BOUTON_AIDE,
BOUTON_UNDO,
BOUTON_KILL,
BOUTON_QUIT,
BOUTON_PALETTE,
BOUTON_PAL_LEFT,
BOUTON_PAL_RIGHT,
BOUTON_CHOIX_COL,
BOUTON_CACHER
};
// Les actions des touches spéciales
enum ACTIONS_SPECIALES
{
SPECIAL_MOUSE_UP, // |
SPECIAL_MOUSE_DOWN, // |
SPECIAL_MOUSE_LEFT, // |
SPECIAL_MOUSE_RIGHT, // |
SPECIAL_CLICK_LEFT, // | Il faut garder
SPECIAL_CLICK_RIGHT, // | ces constantes
SPECIAL_NEXT_FORECOLOR, // | au début de la
SPECIAL_PREVIOUS_FORECOLOR, // |_ liste car elles
SPECIAL_NEXT_BACKCOLOR, // | sont réutilisées
SPECIAL_PREVIOUS_BACKCOLOR, // | avec leurs valeurs
SPECIAL_RETRECIR_PINCEAU, // | brutes en ASM dans
SPECIAL_GROSSIR_PINCEAU, // | Get_input !!!
SPECIAL_NEXT_USER_FORECOLOR, // |
SPECIAL_PREVIOUS_USER_FORECOLOR, // |
SPECIAL_NEXT_USER_BACKCOLOR, // |
SPECIAL_PREVIOUS_USER_BACKCOLOR, // |
SPECIAL_SCROLL_UP,
SPECIAL_SCROLL_DOWN,
SPECIAL_SCROLL_LEFT,
SPECIAL_SCROLL_RIGHT,
SPECIAL_SCROLL_UP_FAST,
SPECIAL_SCROLL_DOWN_FAST,
SPECIAL_SCROLL_LEFT_FAST,
SPECIAL_SCROLL_RIGHT_FAST,
SPECIAL_SCROLL_UP_SLOW,
SPECIAL_SCROLL_DOWN_SLOW,
SPECIAL_SCROLL_LEFT_SLOW,
SPECIAL_SCROLL_RIGHT_SLOW,
SPECIAL_SHOW_HIDE_CURSOR,
SPECIAL_PINCEAU_POINT,
SPECIAL_DESSIN_CONTINU,
SPECIAL_FLIP_X,
SPECIAL_FLIP_Y,
SPECIAL_ROTATE_90,
SPECIAL_ROTATE_180,
SPECIAL_STRETCH,
SPECIAL_DISTORT,
SPECIAL_OUTLINE,
SPECIAL_NIBBLE,
SPECIAL_GET_BRUSH_COLORS,
SPECIAL_RECOLORIZE_BRUSH,
SPECIAL_ROTATE_ANY_ANGLE,
SPECIAL_LOAD_BRUSH,
SPECIAL_SAVE_BRUSH,
SPECIAL_INVERT_SIEVE,
SPECIAL_ZOOM_IN,
SPECIAL_ZOOM_OUT,
SPECIAL_CENTER_ATTACHMENT,
SPECIAL_TOP_LEFT_ATTACHMENT,
SPECIAL_TOP_RIGHT_ATTACHMENT,
SPECIAL_BOTTOM_LEFT_ATTACHMENT,
SPECIAL_BOTTOM_RIGHT_ATTACHMENT,
SPECIAL_EXCLUDE_COLORS_MENU,
SPECIAL_SHADE_MODE, // |
SPECIAL_SHADE_MENU, // |
SPECIAL_QUICK_SHADE_MODE, // |
SPECIAL_QUICK_SHADE_MENU, // |
SPECIAL_STENCIL_MODE, // |
SPECIAL_STENCIL_MENU, // |
SPECIAL_MASK_MODE, // | Il faut que le premier effet soit
SPECIAL_MASK_MENU, // | SPECIAL_SHADE_MODE, et que le
SPECIAL_GRID_MODE, // | dernier soit SPECIAL_TILING_MENU,
SPECIAL_GRID_MENU, // |_ et que seuls des effets soient
SPECIAL_SIEVE_MODE, // | définis entre ces deux là car
SPECIAL_SIEVE_MENU, // | des tests sur cet intervalle sont
SPECIAL_COLORIZE_MODE, // | faits dans le moteur.
SPECIAL_COLORIZE_MENU, // |
SPECIAL_SMOOTH_MODE, // |
SPECIAL_SMOOTH_MENU, // |
SPECIAL_SMEAR_MODE, // |
SPECIAL_TILING_MODE, // |
SPECIAL_TILING_MENU // |
};
// Définition des opérations:
enum OPERATIONS
{
OPERATION_DESSIN_CONTINU, // Dessin à la main continu
OPERATION_DESSIN_DISCONTINU, // Dessin à la main discontinu
OPERATION_DESSIN_POINT, // Dessin à la main point par point
OPERATION_LIGNE, // Lignes
OPERATION_K_LIGNE, // Lignes reliées
OPERATION_LIGNES_CENTREES, // Lignes concentriques
OPERATION_RECTANGLE_VIDE, // Rectangle vide
OPERATION_RECTANGLE_PLEIN, // Rectangle plein
OPERATION_CERCLE_VIDE, // Cercle vide
OPERATION_CERCLE_PLEIN, // Cercle plein
OPERATION_ELLIPSE_VIDE, // Ellipse vide
OPERATION_ELLIPSE_PLEINE, // Ellipse pleine
OPERATION_FILL, // Fill
OPERATION_REMPLACER, // Remplacer couleur
OPERATION_PRISE_BROSSE, // Prise de brosse rectangulaire
OPERATION_POLYBROSSE, // Prise d'une brosse multiforme
OPERATION_PIPETTE, // Récupération d'une couleur
OPERATION_LOUPE, // Positionnement de la fenêtre de loupe
OPERATION_COURBE_3_POINTS, // Courbe à 3 points
OPERATION_COURBE_4_POINTS, // Courbe à 4 points
OPERATION_SPRAY, // Spray
OPERATION_POLYGONE, // Polygone
OPERATION_POLYFORM, // Polyforme
OPERATION_POLYFILL, // Polyfill
OPERATION_FILLED_POLYFORM, // Polyforme rempli
OPERATION_SCROLL, // Scroll
OPERATION_CERCLE_DEGRADE, // Cercles dégradés
OPERATION_ELLIPSE_DEGRADEE, // Ellipses dégradées
OPERATION_TOURNER_BROSSE, // Faire tourner brosse
OPERATION_ETIRER_BROSSE, // Etirer brosse
OPERATION_DEFORMER_BROSSE, // Deformer brosse
OPERATION_AUCUNE
};
#endif