Description du format de fichier .CTL et des structures de donées:
fichier FileFormat.txt (présent dans le répertoire d'installation de WinCocktail)
--------------------------------- Description du format de fichier CTL (CockTaiL) --------------------------------- Offset Taille Type Description (decimal) (decimal) ** Entete ** 0 4 integer Nombre de recettes dans le fichier. Peut etre ignoré, mais peut servir a afficher une progressbar. ** 1er Bloc de données ** 4 4 integer Taille de l'enregistrement ( tjrs >= à 98) ->RecLen 8 1 byte Longueur de la chaine représentant le nom de la recette. Peut etre ignoré 9 30 str_azt Nom de la recette, fini par \0 39 4 integer Id de la recette. Peut etre le numero d'ordre ou un numero unique 43 1 byte Mélangeur 44 1 byte Verre 45 1 byte Cout 46 1 sbyte Nombre de personne 47 1 byte Gout 48 1 byte Alcool 49 1 byte temperature 50 1 bytebool Avec des bulles 51 4 sinteger Couleur 1 55 4 sinteger Couleur 2 59 1 byte Longeur de la chaine representant le nom de l'auteur de la recette. Peut etre ignoré 60 30 str_azt Nom de l'auteur de la recette, fini par \0 90 4 pointer Adresse de la chaine Photo. Doit être ignoré 94 4 pointer Adresse de la chaine Video. Doit être ignoré 98 4 pointer adresse de la chaine Ingredients. Doit être ignoré 102 4 pointer Adresse de la chaine recette. Doit être ignoré. 106 >=1 str_azt Chaine représentant la photo. Fini par \0 >=1 str_azt Chaine représentant la video. Fini par \0 >=1 str_azt Chaine représentant les ingrédients. Fini par \0 >=1 str_azt Chaine représentant la recette. Fini par \0 ** 1er Bloc de données ** =4+RecLen 4 integer Taille de l'enregistrement ( tjrs >= à 98) ...etc... Pour lire les données, il ne faut pas lire un record directement, car la taille de la structure varie en fonctions des chaines de caractère. Il faut mieux lire tout d'abord le bloc fixe (ofset 4 à 90 en ignorant les 4 pointeurs) puis sauter 16 octets et lire les chaînes AZT. Pour lire ou écrire dans un fichier .CTL, on peut s'inspirer des unitées : C_Cocktail et la class TListCocktail qui implémente la lecture et l'écriture. U_Cocktail et les structures de données U_CocktailConst et les constantes (d'erreurs, de chaines) U_Func et les fonctions génériques C_LinearMemory qui implémente la class TWriteLinearMemory et TReadLinearMemory --------------------------------- ------ Structure de donnée ------ --------------------------------- --------------------------------- Langage C --------------------------------- typedef enum TagCocktailMelangeur { melShaker, melVerreAMelange, melElectrique, melDirectVerre, melCuisson, melAutre } TCocktailMelangeur; typedef enum TagCocktailVerre { verreCocktail, verreTumbler, verreOldFashioned, verreFlute, verreCoupe, verrePilsener, verreBallon, verreTulipe, verreChaleur, verreDegustation, verreFizz, verreAutre } TCocktailVerre typedef enum TagCocktailCout { coutPeu, coutRaisonnable, coutCher } TCocktailCout; typedef enum TagCocktailGout { goutBeurk, goutBof, goutMouais, goutMmm, goutSlurp, goutIndefini } TCocktailGout; typedef enum TagCocktailAlcool { alcoolSans, alcoolLeger, alcoolDur, alcoolTresDur, alcoolAie } TCocktailAlcool; typedef enum TagCocktailTemperature { tempGelee, tempFroid, tempChambre, tempChaud, tempBrulant } TCocktailTemperature; typedef struct tagCocktailRecette { // PACKED BYTE NameLen; char Nom[30]; int ID; TCocktailMelangeur Melangeur; TCocktailVerre Verre; TCocktailCout Cout; signed char NbPersonne; TCocktailGout Gout; TCocktailAlcool Alcool; TCocktailTemperature Temperature BYTEBOOL Bulle; signed int Couleur1; signed int Couleur2; BYTE AuteurLen; char Auteur[30]; char *Photo; char *Video; char *Ingredients; char *Recette; } TCocktailRecette; --------------------------------- Langage Pascal --------------------------------- TCocktailMelangeur = (melShaker, melVerreAMelange, melElectrique, melDirectVerre, melCuisson, melAutre); TCocktailVerre = (verreCocktail, verreTumbler, verreOldFashioned, verreFlute, verreCoupe, verrePilsener, verreBallon, verreTulipe, verreChaleur, verreDegustation, verreFizz, verreAutre); TCocktailCout = (coutPeu, coutRaisonnable, coutCher); TCocktailGout = (goutBeurk, goutBof, goutMouais, goutMmm, goutSlurp, goutIndefini); TCocktailAlcool = (alcoolSans, alcoolLeger, alcoolDur, alcoolTresDur, alcoolAie); TCocktailTemperature = ( tempGelee, tempFroid, tempChambre, tempChaud, tempBrulant); TCocktailRecette = packed record Nom : string[30]; Id : integer; Melangeur : TCocktailMelangeur; Verre : TCocktailVerre; Cout : TCocktailCout; NbPersonne : shortint; Gout : TCocktailGout; Alcool : TCocktailAlcool; Temperature : TCocktailTemperature; Bulle : Boolean; Couleur1 : integer; Couleur2 : integer; Auteur : string[30]; Photo : string; Video : string; Ingredients : string; Recette : string; end;