Edition d'offset pour string table - Shell/Batch - Programmation
Marsh Posté le 31-05-2007 à 05:51:23
J'ai peur de pas être clair en fait.
Il me faut un programme qui aille répertorier une position d'octet dans un fichier.
L'ennui, c'est que je n'ai jamais su comment on faisait pour faire "rentrer" un batch dans un fichier pour le lire.
Si quelqu'un connaît les principales fonctions, qu'il me les dise par pitié...
Marsh Posté le 31-05-2007 à 05:34:43
Salut à tous.
Voici mon problème.
Je suis entrain de faire un patch français pour Command & Conquer First Decade.
J'ai quasiment finis, il ne me reste qu'un seul fichier à traduire : le fichier des chaînes string de caractères de C&C1.
En gros, dans ce fichier, il y a tous les textes qu'utilise l'.exe de base (nom des pays, titres, options, nom des véhicules, texte de l'écran des options, etc.)
Ce fichier se nomme conquer.eng
Globalement il se compose comme ça :
De l'offset 00 00 00 00 à l'offset 00 00 05 CB
il y a des pointeurs vers les premiers caractères de chaque chaîne
De l'offset 00 00 05 CC à l'offset 00 00 37 56 (= la fin)
il y a les chaînes de caractère juxtaposées, sachant que 0D = sauter une ligne et 00 = fin de ligne
Je clarifie :
00 00 06 AX: 20 25 64 00 56 6F 75 73 20 61 76 65 7A 20 61 74 : %d.Vous avez at
00 00 06 BX: 74 65 69 6E 74 20 6C 65 20 67 72 61 64 65 20 64 :teint le grade d
00 00 06 CX: 65 00 4F 75 69 00 4E 6F 6E 00 50 72 88 74 00 41 :e.Oui.Non.Prêt.A
Chaque chaîne de texte se finit par un 00 qui correspond à un point.
Au niveau de la table d'allocation, depuis le premier octet, il faut mettre le premier caractère de la chaîne, dont le premier truc juste après ce 00 (et il faut inverser les octets, normal quoi).
Concrètement, pour faire le pointeur du "Oui" et du "Non" de l'exemple ci-dessus, je vais devoir écrire
C2 06 C6 06 dans ma table d'allocation en première partie de fichier.
_____________________________________________________________
Alors voilà.
J'ai essayé de tout faire à la main, j'y ai passé des heures, mais j'ai du faire une gaffe parce que ça ne marche pas correctement.
J'ai donc extrait avec un programme (qui ne permet pas d'éditer malheureusement) cette table en TXT, ça se présente comme ça
%3d.%02d
Upgrade
Upgrade Structure
Upgrade
Sell
Sell Structure
Demolish Structure
Repair
Repair Structure
Repair
You:
Enemy:
Buildings Destroyed By
Units Destroyed By
Tiberium Harvested By
Score: %d
You have attained the rank of
Yes
No
Ready
Holding
Accomplished
Etc.
Donc en héxadécimal, j'ai tous mes caractères juxtaposés séparés par des 0D0A (= un saut de ligne pour le format TXT).
Je vais traduire sur ce TXT, ce sera moins prise de tête (faut mettre les caractères DOS mais je sais faire c bon).
Ensuite j'utiliserai Winhex pour transformer les enchaînements ODOA en 00
Et mon problème, c'est pour me taper les pointeurs du début.
Alors voilà.
=> Je voudrais faire un batch
- qui ouvre mon fichier TXT,
- qui repère dedans les octets double 00 (sachant qu'il n'y en a jamais 2 à la suite)
- qui répertorie la position (offset) de l'octet juste après le 00
- et qui écrit cette position sur 4 octet en les inversant (5C 6A => 6A 5C par exemple) dans un fichier (n'importe lequel on s'en fout)
Comme ça, j'aurai plus qu'à prendre ma table de pointeurs => Copié collé
et mes chaînes de caractères => Copié collé
et c'est bon !
Quelqu'un peut-il donc m'expliquer comment on stocke des données offset octet en variable et comment on écrit dans un fichier avec le batch DOS windows svp ?