124Fermer126
SallyLe 07/05/2008 à 12:52
Moi aussi je veux jouer cheeky
i; if (sauvegarde) return 2; return 1; }
je pense que c'est ma fonction la plus pourrie :#define MAX_CAR_NOM_FIC 19 /* \0 + 8 car. nom du répertoire + \ + 8 car. nom fichier + \0 */

[...]

int open_file (const char *filename) {
  char nom_complet[MAX_CAR_NOM_FIC];
  char *basename;
  char *chiffre;
  Bool sauvegarde = FALSE;
  SYM_ENTRY *se;
  int i;  
  nom_complet[0] = 0;

  if ((basename = strchr (filename, '\'))) {
    basename++;
    chiffre = nom_complet + sprintf (nom_complet + 1, "%.17s", filename);
    if ((se = SymFindPtr (chiffre + 1, 0))) {
      byte *ptr = HeapDeref (se -> handle);
      if (!strcmp ("ZSVG", ptr + *(word*)ptr - 4)) {
	strncpy (nom_jeu, ptr + 10, 7);
	chiffre =
	  nom_complet + 1 + sprintf (nom_complet + 1, REPERTOIRE_JEUX "\%.7s", ptr + 10);
	sauvegarde = TRUE;
      }
      else {
	*chiffre = 0;
	strncpy (nom_jeu, basename, 7);
      }
    }
    else goto argh;
  }
  else {
    chiffre =
      nom_complet + 1 + sprintf (nom_complet + 1, REPERTOIRE_JEUX "\%.7s", filename);
    strncpy (nom_jeu, filename, 7);
  }
  
  chiffre[1] = 0;
  for (i = 0, *chiffre = '1'; i < 4; i++, (*chiffre)++) {
    if ((se = SymFindPtr (chiffre + 1, 0)))
      game_file.fichier[i] = se -> handle;
    else break;
#ifndef DOORS
    if (!ttarchive_valid (HeapDeref (game_file.fichier[i]) + 2)) {
#else
    if (({
      void *ptr = HLock (game_file.fichier[i]);
      !ptr || !(game_file.descriptors[i] = shrnklib_OpenArchive (ptr + 2));
    })) {
#endif /* DOORS */
      ST_helpMsg (FRENCH ? "fichier non valide" : "invalid gamefile");
      return 0;
    }
  }
  if (i == 0) {
argh :
    ST_helpMsg (FRENCH ? "jeu non trouvé" : "game not found");
    return 0;
  }
  game_file.nombre =
(vous remarquerez notamment que le code deviendrait invalide si jamais MAX_CAR_NOM_FIC s'amusait à ne plus être égal à 19 cheeky)