Start of the new configuration file engine. Still needs some work. See "cfg" folder for the old pascal version.
git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@126 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
		
							parent
							
								
									2b609d6e03
								
							
						
					
					
						commit
						a8d54ab31f
					
				
							
								
								
									
										
											BIN
										
									
								
								cfg_new/5pxtinyfont.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								cfg_new/5pxtinyfont.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 720 B  | 
							
								
								
									
										11
									
								
								cfg_new/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								cfg_new/Makefile
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
			
		||||
COPT = -c `sdl-config --cflags` -Wall
 | 
			
		||||
LOPT = `sdl-config --libs` -lSDL_image -lSDL_gfx
 | 
			
		||||
 | 
			
		||||
gfxcfg: gfxcfg.o SFont.o
 | 
			
		||||
	gcc gfxcfg.o SFont.o -o gfxcfg $(LOPT)
 | 
			
		||||
 | 
			
		||||
gfxcfg.o: gfxcfg.c SFont.h
 | 
			
		||||
	gcc gfxcfg.c -o gfxcfg.o $(COPT)
 | 
			
		||||
 | 
			
		||||
SFont.o: SFont.h SFont.c
 | 
			
		||||
	gcc SFont.c -o SFont.o $(COPT)
 | 
			
		||||
							
								
								
									
										178
									
								
								cfg_new/SFont.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										178
									
								
								cfg_new/SFont.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,178 @@
 | 
			
		||||
/*  SFont: a simple font-library that uses special .pngs as fonts
 | 
			
		||||
    Copyright (C) 2003 Karl Bartel
 | 
			
		||||
 | 
			
		||||
    License: GPL or LGPL (at your choice)
 | 
			
		||||
    WWW: http://www.linux-games.com/sfont/
 | 
			
		||||
 | 
			
		||||
    This program 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; either version 2 of the License, or           
 | 
			
		||||
    (at your option) any later version.                                         
 | 
			
		||||
                                                                                
 | 
			
		||||
    This program 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 this program; if not, write to the Free Software                 
 | 
			
		||||
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA   
 | 
			
		||||
                                                                                
 | 
			
		||||
    Karl Bartel
 | 
			
		||||
    Cecilienstr. 14                                                    
 | 
			
		||||
    12307 Berlin
 | 
			
		||||
    GERMANY
 | 
			
		||||
    karlb@gmx.net                                                      
 | 
			
		||||
*/                                                                            
 | 
			
		||||
#include <SDL/SDL.h>
 | 
			
		||||
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include "SFont.h"
 | 
			
		||||
 | 
			
		||||
static Uint32 GetPixel(SDL_Surface *Surface, Sint32 X, Sint32 Y)
 | 
			
		||||
{
 | 
			
		||||
   Uint8  *bits;
 | 
			
		||||
   Uint32 Bpp;
 | 
			
		||||
 | 
			
		||||
   assert(X>=0);
 | 
			
		||||
   assert(X<Surface->w);
 | 
			
		||||
   
 | 
			
		||||
   Bpp = Surface->format->BytesPerPixel;
 | 
			
		||||
   bits = ((Uint8 *)Surface->pixels)+Y*Surface->pitch+X*Bpp;
 | 
			
		||||
 | 
			
		||||
   // Get the pixel
 | 
			
		||||
   switch(Bpp) {
 | 
			
		||||
      case 1:
 | 
			
		||||
         return *((Uint8 *)Surface->pixels + Y * Surface->pitch + X);
 | 
			
		||||
         break;
 | 
			
		||||
      case 2:
 | 
			
		||||
         return *((Uint16 *)Surface->pixels + Y * Surface->pitch/2 + X);
 | 
			
		||||
         break;
 | 
			
		||||
      case 3: { // Format/endian independent 
 | 
			
		||||
         Uint8 r, g, b;
 | 
			
		||||
         r = *((bits)+Surface->format->Rshift/8);
 | 
			
		||||
         g = *((bits)+Surface->format->Gshift/8);
 | 
			
		||||
         b = *((bits)+Surface->format->Bshift/8);
 | 
			
		||||
         return SDL_MapRGB(Surface->format, r, g, b);
 | 
			
		||||
         }
 | 
			
		||||
         break;
 | 
			
		||||
      case 4:
 | 
			
		||||
         return *((Uint32 *)Surface->pixels + Y * Surface->pitch/4 + X);
 | 
			
		||||
         break;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SFont_Font* SFont_InitFont(SDL_Surface* Surface)
 | 
			
		||||
{
 | 
			
		||||
    int x = 0, i = 0;
 | 
			
		||||
    Uint32 pixel;
 | 
			
		||||
    SFont_Font* Font;
 | 
			
		||||
    Uint32 pink;
 | 
			
		||||
 | 
			
		||||
    if (Surface == NULL)
 | 
			
		||||
	return NULL;
 | 
			
		||||
 | 
			
		||||
    Font = (SFont_Font *) malloc(sizeof(SFont_Font));
 | 
			
		||||
    Font->Surface = Surface;
 | 
			
		||||
 | 
			
		||||
    SDL_LockSurface(Surface);
 | 
			
		||||
 | 
			
		||||
    pink = SDL_MapRGB(Surface->format, 255, 0, 255);
 | 
			
		||||
    while (x < Surface->w) {
 | 
			
		||||
	if (GetPixel(Surface, x, 0) == pink) { 
 | 
			
		||||
    	    Font->CharPos[i++]=x;
 | 
			
		||||
    	    while((x < Surface->w) && (GetPixel(Surface, x, 0)== pink))
 | 
			
		||||
		x++;
 | 
			
		||||
	    Font->CharPos[i++]=x;
 | 
			
		||||
	}
 | 
			
		||||
	x++;
 | 
			
		||||
    }
 | 
			
		||||
    Font->MaxPos = x-1;
 | 
			
		||||
    
 | 
			
		||||
    pixel = GetPixel(Surface, 0, Surface->h-1);
 | 
			
		||||
    SDL_UnlockSurface(Surface);
 | 
			
		||||
    SDL_SetColorKey(Surface, SDL_SRCCOLORKEY, pixel);
 | 
			
		||||
 | 
			
		||||
    return Font;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SFont_FreeFont(SFont_Font* FontInfo)
 | 
			
		||||
{
 | 
			
		||||
    SDL_FreeSurface(FontInfo->Surface);
 | 
			
		||||
    free(FontInfo);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SFont_Write(SDL_Surface *Surface, const SFont_Font *Font,
 | 
			
		||||
		 int x, int y, const char *text)
 | 
			
		||||
{
 | 
			
		||||
    const char* c;
 | 
			
		||||
    int charoffset;
 | 
			
		||||
    SDL_Rect srcrect, dstrect;
 | 
			
		||||
 | 
			
		||||
    if(text == NULL)
 | 
			
		||||
	return;
 | 
			
		||||
 | 
			
		||||
    // these values won't change in the loop
 | 
			
		||||
    srcrect.y = 1;
 | 
			
		||||
    dstrect.y = y;
 | 
			
		||||
    srcrect.h = dstrect.h = Font->Surface->h - 1;
 | 
			
		||||
 | 
			
		||||
    for(c = text; *c != '\0' && x <= Surface->w ; c++) {
 | 
			
		||||
	charoffset = ((int) (*c - 33)) * 2 + 1;
 | 
			
		||||
	// skip spaces and nonprintable characters
 | 
			
		||||
	if (*c == ' ' || charoffset < 0 || charoffset > Font->MaxPos) {
 | 
			
		||||
	    x += Font->CharPos[2]-Font->CharPos[1];
 | 
			
		||||
	    continue;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	srcrect.w = dstrect.w = 
 | 
			
		||||
	    (Font->CharPos[charoffset+2] + Font->CharPos[charoffset+1])/2 -
 | 
			
		||||
	    (Font->CharPos[charoffset] + Font->CharPos[charoffset-1])/2;
 | 
			
		||||
	srcrect.x = (Font->CharPos[charoffset]+Font->CharPos[charoffset-1])/2;
 | 
			
		||||
	dstrect.x = x - (float)(Font->CharPos[charoffset]
 | 
			
		||||
			      - Font->CharPos[charoffset-1])/2;
 | 
			
		||||
 | 
			
		||||
	SDL_BlitSurface(Font->Surface, &srcrect, Surface, &dstrect); 
 | 
			
		||||
 | 
			
		||||
	x += Font->CharPos[charoffset+1] - Font->CharPos[charoffset];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int SFont_TextWidth(const SFont_Font *Font, const char *text)
 | 
			
		||||
{
 | 
			
		||||
    const char* c;
 | 
			
		||||
    int charoffset=0;
 | 
			
		||||
    int width = 0;
 | 
			
		||||
 | 
			
		||||
    if(text == NULL)
 | 
			
		||||
	return 0;
 | 
			
		||||
 | 
			
		||||
    for(c = text; *c != '\0'; c++) {
 | 
			
		||||
	charoffset = ((int) *c - 33) * 2 + 1;
 | 
			
		||||
	// skip spaces and nonprintable characters
 | 
			
		||||
        if (*c == ' ' || charoffset < 0 || charoffset > Font->MaxPos) {
 | 
			
		||||
            width += Font->CharPos[2]-Font->CharPos[1];
 | 
			
		||||
	    continue;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	width += Font->CharPos[charoffset+1] - Font->CharPos[charoffset];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return width;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int SFont_TextHeight(const SFont_Font* Font)
 | 
			
		||||
{
 | 
			
		||||
    return Font->Surface->h - 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SFont_WriteCenter(SDL_Surface *Surface, const SFont_Font *Font,
 | 
			
		||||
		       int y, const char *text)
 | 
			
		||||
{
 | 
			
		||||
    SFont_Write(Surface, Font, Surface->w/2 - SFont_TextWidth(Font, text)/2,
 | 
			
		||||
	    	y, text);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										83
									
								
								cfg_new/SFont.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								cfg_new/SFont.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,83 @@
 | 
			
		||||
/*  SFont: a simple font-library that uses special bitmaps as fonts
 | 
			
		||||
    Copyright (C) 2003 Karl Bartel
 | 
			
		||||
 | 
			
		||||
    License: GPL or LGPL (at your choice)
 | 
			
		||||
    WWW: http://www.linux-games.com/sfont/
 | 
			
		||||
 | 
			
		||||
    This program 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; either version 2 of the License, or           
 | 
			
		||||
    (at your option) any later version.                                         
 | 
			
		||||
                                                                                
 | 
			
		||||
    This program 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 this program; if not, write to the Free Software                 
 | 
			
		||||
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA   
 | 
			
		||||
                                                                                
 | 
			
		||||
    Karl Bartel
 | 
			
		||||
    Cecilienstr. 14                                                    
 | 
			
		||||
    12307 Berlin
 | 
			
		||||
    GERMANY
 | 
			
		||||
    karlb@gmx.net                                                      
 | 
			
		||||
*/                                                                            
 | 
			
		||||
 | 
			
		||||
/************************************************************************ 
 | 
			
		||||
*    SFONT - SDL Font Library by Karl Bartel <karlb@gmx.net>            *
 | 
			
		||||
*                                                                       *
 | 
			
		||||
*  All functions are explained below. For further information, take a   *
 | 
			
		||||
*  look at the example files, the links at the SFont web site, or       *
 | 
			
		||||
*  contact me, if you problem isn' addressed anywhere.                  *
 | 
			
		||||
*                                                                       *
 | 
			
		||||
************************************************************************/
 | 
			
		||||
#ifndef SFONT_H
 | 
			
		||||
#define SFONT_H
 | 
			
		||||
 | 
			
		||||
#include <SDL.h>
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus 
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// Delcare one variable of this type for each font you are using.
 | 
			
		||||
// To load the fonts, load the font image into YourFont->Surface
 | 
			
		||||
// and call InitFont( YourFont );
 | 
			
		||||
typedef struct {
 | 
			
		||||
	SDL_Surface *Surface;	
 | 
			
		||||
	int CharPos[512];
 | 
			
		||||
	int MaxPos;
 | 
			
		||||
} SFont_Font;
 | 
			
		||||
 | 
			
		||||
// Initializes the font
 | 
			
		||||
// Font: this contains the suface with the font.
 | 
			
		||||
//       The Surface must be loaded before calling this function
 | 
			
		||||
SFont_Font* SFont_InitFont (SDL_Surface *Font);
 | 
			
		||||
 | 
			
		||||
// Frees the font
 | 
			
		||||
// Font: The font to free
 | 
			
		||||
//       The font must be loaded before using this function.
 | 
			
		||||
void SFont_FreeFont(SFont_Font* Font);
 | 
			
		||||
 | 
			
		||||
// Blits a string to a surface
 | 
			
		||||
// Destination: the suface you want to blit to
 | 
			
		||||
// text: a string containing the text you want to blit.
 | 
			
		||||
void SFont_Write(SDL_Surface *Surface, const SFont_Font *Font, int x, int y,
 | 
			
		||||
				 const char *text);
 | 
			
		||||
 | 
			
		||||
// Returns the width of "text" in pixels
 | 
			
		||||
int SFont_TextWidth(const SFont_Font* Font, const char *text);
 | 
			
		||||
// Returns the height of "text" in pixels (which is always equal to Font->Surface->h)
 | 
			
		||||
int SFont_TextHeight(const SFont_Font* Font);
 | 
			
		||||
 | 
			
		||||
// Blits a string to Surface with centered x position
 | 
			
		||||
void SFont_WriteCenter(SDL_Surface *Surface, const SFont_Font* Font, int y,
 | 
			
		||||
					   const char *text);
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* SFONT_H */
 | 
			
		||||
							
								
								
									
										285
									
								
								cfg_new/gfxcfg.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										285
									
								
								cfg_new/gfxcfg.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,285 @@
 | 
			
		||||
//C
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
 | 
			
		||||
//POSIX
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
 | 
			
		||||
//SDL
 | 
			
		||||
#include <SDL.h>
 | 
			
		||||
#include <SDL_image.h>
 | 
			
		||||
#include <SDL_gfxPrimitives.h>
 | 
			
		||||
 | 
			
		||||
//mine
 | 
			
		||||
#include "SFont.h"
 | 
			
		||||
 | 
			
		||||
/*** Constants ***/
 | 
			
		||||
#define NB_MAX_OPTIONS 134
 | 
			
		||||
 | 
			
		||||
/*** Types definitions and structs ***/
 | 
			
		||||
 | 
			
		||||
typedef struct{
 | 
			
		||||
	uint16_t Numero;
 | 
			
		||||
	uint16_t Touche;
 | 
			
		||||
	uint16_t Touche2;
 | 
			
		||||
	char Libelle[36];
 | 
			
		||||
	char Explic1[77];
 | 
			
		||||
	char Explic2[77];
 | 
			
		||||
	bool Erreur;
 | 
			
		||||
	bool Suppr;
 | 
			
		||||
} Options;
 | 
			
		||||
 | 
			
		||||
typedef struct{
 | 
			
		||||
	char Signature[3];
 | 
			
		||||
	uint8_t Version1;
 | 
			
		||||
	uint8_t Version2;
 | 
			
		||||
	uint8_t Beta1;
 | 
			
		||||
	uint8_t Beta2;
 | 
			
		||||
} Type_header;
 | 
			
		||||
 | 
			
		||||
#define Header_size 7
 | 
			
		||||
 | 
			
		||||
typedef struct{
 | 
			
		||||
	uint8_t Numero;
 | 
			
		||||
	uint16_t Taille;
 | 
			
		||||
} Type_chunk;
 | 
			
		||||
 | 
			
		||||
#define Chunk_size 3
 | 
			
		||||
 | 
			
		||||
/*** Global variables ***/
 | 
			
		||||
SFont_Font* MyFont;
 | 
			
		||||
SDL_Surface* Ecran;
 | 
			
		||||
int Numero_definition_option;
 | 
			
		||||
Options Config[NB_MAX_OPTIONS];
 | 
			
		||||
bool Choix_enreg;
 | 
			
		||||
uint16_t NB_OPTIONS;
 | 
			
		||||
 | 
			
		||||
/*** Fonctions de gestion des évènements SDL ***/
 | 
			
		||||
 | 
			
		||||
/* Attend qu'une touche soit pressée. Retourne le keysym. */
 | 
			
		||||
SDL_keysym Lire_Touche(void)
 | 
			
		||||
{
 | 
			
		||||
	SDL_Event Event;
 | 
			
		||||
 | 
			
		||||
	do{
 | 
			
		||||
		SDL_WaitEvent(&Event);
 | 
			
		||||
		if(Event.type==SDL_KEYDOWN) break;
 | 
			
		||||
	}while(1);
 | 
			
		||||
 | 
			
		||||
	return Event.key.keysym;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*** Drawing functions ***/
 | 
			
		||||
 | 
			
		||||
/* Draws a filled rectanble */
 | 
			
		||||
void Cadre(int x,int y,int w,int h,uint8_t color)
 | 
			
		||||
{
 | 
			
		||||
	SDL_Rect rct;
 | 
			
		||||
	rct.x=x;
 | 
			
		||||
	rct.y=y;
 | 
			
		||||
	rct.w=w;
 | 
			
		||||
	rct.h=h;
 | 
			
		||||
	
 | 
			
		||||
	SDL_FillRect(Ecran, &rct, color);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Draws the main screen and welcome message */
 | 
			
		||||
void Dessiner_ecran_principal()
 | 
			
		||||
{
 | 
			
		||||
	Cadre(3,3,630,40,2);
 | 
			
		||||
	SFont_Write(Ecran, MyFont, 8,6,"Setup program for Grafx2 (c) 1996-98 Sunset Design and 2008 PulkoMandy");
 | 
			
		||||
	SFont_Write(Ecran, MyFont, 8,18,"Use Up/Down arrows & Page-Up/Page-Down to scroll, Enter to modify, Delete to remove a hot-key, and Escape to validate or cancel.");
 | 
			
		||||
	SFont_Write(Ecran, MyFont, 8,30,"DO NOT USE Print-screen, Pause, and other special keys!");
 | 
			
		||||
 | 
			
		||||
	Cadre(3,46,630,400,1);
 | 
			
		||||
 | 
			
		||||
	SDL_UpdateRect(Ecran,0,0,640,480);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Tout_ecrire(uint16_t Decalage_curseur,uint16_t Position_curseur)
 | 
			
		||||
{
 | 
			
		||||
	puts("TOUT ECRIRE UNIMPLEMENTED");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*** Configuration handling functions ***/
 | 
			
		||||
 | 
			
		||||
/* Defines an option */
 | 
			
		||||
void Definir_option(uint16_t Numero, char* Libelle, char* Explic1, char* Explic2, bool Deletable, 
 | 
			
		||||
	uint16_t Default_key)
 | 
			
		||||
{
 | 
			
		||||
	Config[Numero_definition_option].Numero = Numero;
 | 
			
		||||
	Config[Numero_definition_option].Touche = Default_key;
 | 
			
		||||
	Config[Numero_definition_option].Touche2 = 0xFF;
 | 
			
		||||
	strncpy(Config[Numero_definition_option].Libelle,Libelle,36);
 | 
			
		||||
	strncpy(Config[Numero_definition_option].Explic1,Explic1,77);
 | 
			
		||||
	strncpy(Config[Numero_definition_option].Explic2,Explic2,77);
 | 
			
		||||
	Config[Numero_definition_option].Erreur = false;
 | 
			
		||||
	Config[Numero_definition_option].Suppr = Deletable;
 | 
			
		||||
	Numero_definition_option ++ ;	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Initialize configuration */
 | 
			
		||||
bool Initialiser_config()
 | 
			
		||||
{
 | 
			
		||||
	bool Erreur = false;
 | 
			
		||||
	FILE* Fichier_INI;
 | 
			
		||||
 | 
			
		||||
	Numero_definition_option = 0;
 | 
			
		||||
 | 
			
		||||
	Definir_option(0,"Scroll up",
 | 
			
		||||
		"Scrolls the picture upwards, both in magnify and normal mode.",
 | 
			
		||||
		"This hotkey cannot be removed.",
 | 
			
		||||
		false, 0x48); // HAUT
 | 
			
		||||
	Definir_option(1,"Scroll down",
 | 
			
		||||
		"Scrolls the picture upwards, both in magnify and normal mode.",
 | 
			
		||||
		"This hotkey cannot be removed.",
 | 
			
		||||
		false, 0x48); // HAUT
 | 
			
		||||
	Definir_option(2,"Scroll left",
 | 
			
		||||
		"Scrolls the picture upwards, both in magnify and normal mode.",
 | 
			
		||||
		"This hotkey cannot be removed.",
 | 
			
		||||
		false, 0x48); // HAUT
 | 
			
		||||
	Definir_option(3,"Scroll right",
 | 
			
		||||
		"Scrolls the picture upwards, both in magnify and normal mode.",
 | 
			
		||||
		"This hotkey cannot be removed.",
 | 
			
		||||
		false, 0x48); // HAUT
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint8_t Fenetre_choix(uint8_t Largeur, uint8_t Hauteur, char* Titre, char* Choix, uint8_t Choix_debut,
 | 
			
		||||
	uint8_t Couleur,uint8_t Couleur_choix)
 | 
			
		||||
{
 | 
			
		||||
	puts("FENETRE CHOIX UNIMPLEMENTED !!!");
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Test_duplic()
 | 
			
		||||
{
 | 
			
		||||
	puts("TEST DUPLIC UNIMPLEMENTED");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Checks if everything is OK */
 | 
			
		||||
bool Validation()
 | 
			
		||||
{
 | 
			
		||||
	bool Y_a_des_erreurs = false;
 | 
			
		||||
	uint16_t i = 0;
 | 
			
		||||
 | 
			
		||||
	while(i<NB_OPTIONS && !Y_a_des_erreurs)
 | 
			
		||||
	{
 | 
			
		||||
		Y_a_des_erreurs = Config[i].Erreur;
 | 
			
		||||
		i++;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	if (Y_a_des_erreurs)
 | 
			
		||||
		Choix_enreg = 4 - Fenetre_choix(30,12,
 | 
			
		||||
			"There are errors in the\nhot-keys configuration.\nCheck out the \"Err\" column\nin order to correct them.","OK\nQuit anyway",1,0x4C,0x3F);
 | 
			
		||||
	else
 | 
			
		||||
		Choix_enreg = Fenetre_choix(30,10,"Save configuration?","Yes\nNo\nCancel",1,0x2A,0x6F);
 | 
			
		||||
	if (Choix_enreg!=3) return true; else return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Let the user do things */
 | 
			
		||||
void Setup()
 | 
			
		||||
{
 | 
			
		||||
	bool Sortie_OK = false;
 | 
			
		||||
	SDL_keysym Touche;
 | 
			
		||||
	uint16_t Decalage_curseur=0;
 | 
			
		||||
	uint16_t Position_curseur=1;
 | 
			
		||||
	Test_duplic();
 | 
			
		||||
	Tout_ecrire(0,1);
 | 
			
		||||
	do{
 | 
			
		||||
		Touche = Lire_Touche();
 | 
			
		||||
		switch(Touche.sym)
 | 
			
		||||
		{
 | 
			
		||||
			case SDLK_UP:
 | 
			
		||||
			case SDLK_DOWN:
 | 
			
		||||
			case SDLK_PAGEUP:
 | 
			
		||||
			case SDLK_PAGEDOWN:
 | 
			
		||||
			case SDLK_RETURN:
 | 
			
		||||
			case SDLK_DELETE:
 | 
			
		||||
				break;
 | 
			
		||||
			case SDLK_ESCAPE:
 | 
			
		||||
				Sortie_OK=Validation();
 | 
			
		||||
				break; 
 | 
			
		||||
			default:
 | 
			
		||||
				break; // On ne fait rien pour les autres touches
 | 
			
		||||
		}
 | 
			
		||||
	} while(!Sortie_OK);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*** File management functions ***/
 | 
			
		||||
 | 
			
		||||
/* Checks if we can write the config file */
 | 
			
		||||
bool Verifier_ecriture_possible()
 | 
			
		||||
{
 | 
			
		||||
	return access("./",W_OK) == 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Save the config file */
 | 
			
		||||
void Enregistrer_config()
 | 
			
		||||
{
 | 
			
		||||
	FILE* Fichier;
 | 
			
		||||
	uint16_t Indice;
 | 
			
		||||
	uint8_t Octet;
 | 
			
		||||
 | 
			
		||||
	if(Choix_enreg==true) // Save keys if wanted
 | 
			
		||||
	{
 | 
			
		||||
		Fichier = fopen("gfx2.cfg","wb");
 | 
			
		||||
		fseek(Fichier,Header_size+Chunk_size,SEEK_SET); // Positionnement sur la première touche
 | 
			
		||||
 | 
			
		||||
		for(Indice = 0;Indice < NB_OPTIONS;Indice++)
 | 
			
		||||
		{
 | 
			
		||||
			fwrite(&Config[Indice].Numero,sizeof(uint16_t),1,Fichier);
 | 
			
		||||
			fwrite(&Config[Indice].Touche,sizeof(uint16_t),1,Fichier);
 | 
			
		||||
			fwrite(&Config[Indice].Touche2,sizeof(uint16_t),1,Fichier);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		fclose(Fichier);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*** Main program ***/
 | 
			
		||||
 | 
			
		||||
int main(void)
 | 
			
		||||
{	
 | 
			
		||||
 | 
			
		||||
	if (Verifier_ecriture_possible())
 | 
			
		||||
	{
 | 
			
		||||
		/* On initialise SDL */
 | 
			
		||||
		SDL_Init(SDL_INIT_VIDEO);
 | 
			
		||||
		Ecran = SDL_SetVideoMode(640,480,8,0);
 | 
			
		||||
		SDL_WM_SetCaption ("Grafx2 configuration tool","../gfx2.gif");
 | 
			
		||||
 | 
			
		||||
		/* On initialise SFont */
 | 
			
		||||
		MyFont = SFont_InitFont(IMG_Load("5pxtinyfont.png"));
 | 
			
		||||
 | 
			
		||||
		Dessiner_ecran_principal();
 | 
			
		||||
		
 | 
			
		||||
		if(!Initialiser_config())
 | 
			
		||||
		{
 | 
			
		||||
			Setup();
 | 
			
		||||
			Enregistrer_config();
 | 
			
		||||
 | 
			
		||||
			/* On fait un peu de nettoyage avant de s'en aller */
 | 
			
		||||
			SFont_FreeFont(MyFont);
 | 
			
		||||
			SDL_Quit();
 | 
			
		||||
			exit(0);
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			puts("Error reading GFX2.DAT! File is absent or corrupt.");
 | 
			
		||||
			SFont_FreeFont(MyFont);
 | 
			
		||||
			SDL_Quit();
 | 
			
		||||
			exit(1);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		puts("Error: you mustn't run this setup program from a read-only drive!\n");
 | 
			
		||||
		puts("The most probable cause of this error is that you are running this program");
 | 
			
		||||
		puts("from a CD-Rom or a protected floppy disk.");
 | 
			
		||||
		puts("You should try to copy all the files of Grafx2 on a hard drive or to");
 | 
			
		||||
		puts("unprotect your floppy disk if you really want to run it from this outdated medium.");
 | 
			
		||||
		exit(1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user