void SupprimeExtension(char *nom_fichier)		{
	char *ptr, *ptrPoint;
	ptr=nom_fichier;
	//Tout ce qu'il y a avant le point
	ptrPoint=NULL;
	while(*ptr)		{
		if (*ptr=='.')
			ptrPoint=ptr;
		ptr++;
	}
	if (ptrPoint)
		*ptrPoint=0;
}

//Extension (test\gbagraphics.map.c donnera .c)
char *GetExtension(char *nom_fichier)		{
	char *ptr, *ptrPoint;
	ptr=nom_fichier;
	//Tout ce qu'il y a avant le point
	ptrPoint=NULL;
	while(*ptr)		{
		if (*ptr=='/' || *ptr=='\\')
			ptrPoint=NULL;
		else if (*ptr=='.')
			ptrPoint=ptr;
		ptr++;
	}
	if (ptrPoint)
		return ptrPoint+1;
	else			//Fin de chaîne si pas trouvé
		return ptr;
}

//Grande extension (test\gbagraphics.map.c donnera .map.c)
char *GetWideExtension(char *nom_fichier)		{
	char *ptr, *ptrPoint;
	int trouve;
	ptr=nom_fichier;
	//Tout ce qu'il y a avant le point
	ptrPoint=ptr-1;
	trouve = 0;
	while(*ptr)		{
		if (*ptr=='\\' || *ptr=='/')
			trouve = 0;
		if (*ptr=='.' && !trouve)
			ptrPoint=ptr, trouve = 1;
		ptr++;
	}
	if (ptrPoint)
		return ptrPoint+1;
	else
		return ptrPoint;
}

//Grande extension (test\gbagraphics.map.c donnera .map.c)
void GetNomDossier(char *nom_fichier)		{
	char *ptr, *ptrPoint;
	int trouve;
	ptr=nom_fichier;
	//Tout ce qu'il y a avant le point
	ptrPoint=ptr;
	trouve = 0;
	while(*ptr)		{
		if (*ptr=='\\' || *ptr=='/')
			ptrPoint=ptr;
		ptr++;
	}
	*ptrPoint=0;
}

void EcritFichierConfigMap()			{
	FILE *f;
	int i, numeroMap, j;
	const char *txt_vrai="vrai", *txt_faux="faux";
	RECT rect;
	unsigned char fondsUtilises[MAX_FONDS];
	BOOL bOk;
	char nom_fichier[1000];

	//Ne pas sauver?
	if (!sauverParamsMaps)
		return;

	GetNomFichierConfigMap(nom_fichier, elements[num_edit].nom_fichier);

	f=fopen(nom_fichier, "w");
//	fputs("    Fonds.Reinit\n", f);

	numeroMap=0;
	for (i=0;i<nMaps;i++)		{
		if (!fond_a_sauver[i])
			continue;
		//Ouvre le fichier de son nom
		fprintf(f, "    Fonds.Ajoute \"%s\", %i\n", ele_fond[i]->nom_court, i+1);
		//Onglet général
		if (!fond_actif[i])
			fprintf(f, "    Fonds[%i].Visible = faux\n", i+1);
		if (params[i].parallaxeX != 1.0 || params[i].parallaxeY != 1.0)
			fprintf(f, "    Fonds[%i].VitesseDefil %f, %f\n", i+1, params[i].parallaxeX, params[i].parallaxeY);
		if (params[i].grilleX != params[i].tileBaseX || params[i].grilleY != params[i].tileBaseY)
			fprintf(f, "    Fonds[%i].Grille %i, %i\n", i+1, params[i].grilleX, params[i].grilleY);
		for (j=0;j<n_conditions[i];j++)			{
			fprintf(f, "    Fonds[%i].AjCondition 0x%x,0x%x 0x%x%s\n", i+1, s_conditions[i][j].debut, s_conditions[i][j].fin, s_conditions[i][j].debut-s_conditions[i][j].difference, s_conditions[i][j].exact?"=":"");
		}
		//Onglet avancé
		if (params[i].emul_gba)
			fprintf(f, "    Fonds[%i].EmulGBA = %s\n", i+1, GetBoolText(params[i].emul_gba));
		numeroMap++;
	}

	/*
		Paramètres généraux
	*/

	//Ajoute la transparence des fonds
	if (fondTransparent)
		fprintf(f, "    Fonds.Transparence = %s\n", fondTransparent?txt_vrai:txt_faux);
	//Map spécimen
	if (IsWindowVisible(hDlgBits) && IsAllocated_Bits())			{
		fputs("    Bits.Affiche\n", f);
		for (i=0;i<nMaps;i++)		{
			for (j=0;j<NOMBRE_BITS;j++)			{
				if (strcmp(nomsBits[i][j],chneNomsDefautBits[j]))
					fprintf(f, "    Bits[%i].TexteBit %i,\"%s\"\n", i+1, 15-j, nomsBits[i][j]);
				if ((bitsActives[i][j] && (j>=6 && j<=7)) || (!bitsActives[i][j] && (j>=0 && j<=5)))
					fprintf(f, "    Bits[%i].BitActif = %i,%s\n", i+1, 15-j, bitsActives[i][j]?txt_vrai:txt_faux);
			}
		}
	}

	//Mode hexa
	//   * Actif
	if (MODE_TEXTE)
		fprintf(f, "    ModeHexa.Actif = %s\n", MODE_TEXTE?txt_vrai:txt_faux);
	//   * Map graphique en fond
	if (fondHexa)
		fprintf(f, "    ModeHexa.FondActif = %s\n", fondHexa?txt_vrai:txt_faux);
	//   * Comble avec des zéros
	if (combleZeros)
		fprintf(f, "    ModeHexa.CombleZeros = %s\n", combleZeros?txt_vrai:txt_faux);

	//Options éditeur
	//Onglet Fonds
	if (grille)
		fprintf(f, "    Editeur.Grille = %s\n", grille?txt_vrai:txt_faux);
	//Par défaut: gris
	if (couleurGrille!=RGB(64,64,64))			{
		unsigned char *ptr, r,v,b;
		ptr=(unsigned char*)&couleurGrille;
		r=*ptr++;
		v=*ptr++;
		b=*ptr++;
		fprintf(f, "    Editeur.CouleurGrille = RGB(%i,%i,%i)\n", r,v,b);
	}
	if (transGrille!=96)
		fprintf(f, "    Editeur.AlphaGrille = %i\n", transGrille);
	if (AlphaPremPlan!=160)
		fprintf(f, "    Fonds.AlphaPremPlan = %i\n", AlphaPremPlan);
	if (gfxAlphaFonds!=128)
		fprintf(f, "    Fonds.AlphaGfx = %i\n", gfxAlphaFonds);
	if (hexAlphaFonds!=96)
		fprintf(f, "    Fonds.AlphaHex = %i\n", hexAlphaFonds);

	//Onglet Affichage
	if (zoom!=1.0)
		fprintf(f, "    Editeur.Zoom = %#.2f\n", (float)zoom);
	if (zoomPrecis)
		fprintf(f, "    Editeur.ZoomPrecis = %s\n", zoomPrecis?txt_vrai:txt_faux);

	//Onglet Specimen
	for (i=0;i<nPlansLies;i++)		{
		fprintf(f, "    Specimen.AjouteMap %i\n", plans[i]+1);
	}

	//Reste les positions de la fenêtre
	GetWindowRect(gblHEdit, &rect);
	fprintf(f, "    Editeur.Deplace %i, %i, %i, %i, %s\n", rect.right-rect.left, rect.bottom-rect.top, rect.left, rect.top, IsZoomed(gblHEdit)?txt_vrai:txt_faux);
	if (gblHSpec)		{
//		if (IsWindowVisible(gblHSpec))		{
			GetWindowRect(gblHSpec, &rect);
			fprintf(f, "    Specimen.Deplace %i, %i, %i, %i\n", rect.right-rect.left, rect.bottom-rect.top, rect.left, rect.top);
//		}
		fprintf(f, "    Specimen.Affiche %s\n", bSpecimenAffiche?txt_vrai:txt_faux);
	}

	if (IsWindowVisible(hDlgBits))		{
		GetWindowRect(hDlgBits, &rect);
		fprintf(f, "    Bits.Deplace %i, %i\n", rect.left, rect.top);
	}

	memset(fondsUtilises, 0, sizeof(fondsUtilises));
	for (i=0;i<MAX_FONDS;i++)			{
		bOk = TRUE;
		for (j=0;j<i;j++)		{
			if (!memcmp(liens[j], liens[i], sizeof(liens[0])))			{
				bOk = FALSE;
				break;
			}
		}
		if (!bOk)
			continue;
		//Il faut au moins que deux maps soient liées...
		if (liens[i][0]==LIEN_INVALIDE || liens[i][1]==LIEN_INVALIDE)
			continue;
		fprintf(f, "    Fonds.LieMap ");
		for (j=0;TRUE;j++)		{
			if (liens[i][j+1]==LIEN_INVALIDE)		{		//Dernier en liste
				fprintf(f, "%i\n", liens[i][j]+1);
				break;
			}
			else
				fprintf(f, "%i, ", liens[i][j]+1);
		}
	}

	//Terminé
	fputs("    Fin\n\n\n\n", f);
	fclose(f);
//	WinExec("notepad test.cfg.txt",1);
}


