@assinie : ah, cool ! De mon côté je me prends bien la tête, surtout avec les lignes composées de plusieurs instructions séparées par des ":"... ce genre de code par exemple :
$07F0 60 AD 0D 00 08 15 09 2E 96 2E 96 00 98 6D 08 00 ©............m..
$0800 07 E8 FD 00 00 D0 00 18 F2 FD 32 AA D0 01 2C D0 ..........2...,.
$0810 02 20 AA D0 03 2C D0 02 20 AA D0 04 2C D0 05 0A . ...,.. ...,...
$0820 FC FD 19 0B D0 06 1C D0 07 39 06 FE 7B AA D0 08 .........9..{...
$0830 2C 89 2D D0 04 2E 20 C0 0B D0 04 15 D0 09 21 D0 ,.-... .......!.
$0840 01 20 AA D0 04 2C D0 04 15 D0 08 20 AA D0 06 2C . ...,..... ...,
$0850 84 2D D0 04 15 D0 09 2E 20 AA D0 01 2C D0 01 15 .-...... ...,...
$0860 D0 03 05 10 FE 03 10 05 1A FE 08 03 00 7D 08 06 .............}..
$0870 00 D0 00 0C 52 45 4E 55 4D E8 FD 2E 96 8A 08 09 ....RENUM.......
$0880 40 D0 01 08 4E 00 00 00 00 00 95 08 11 00 D0 02 @...N...........
$0890 09 31 30 0A 00 A2 08 09 00 D0 03 08 50 00 00 00 .10.........P...
$08A0 00 00 AF 08 09 40 D0 04 08 41 00 00 00 00 00 BC .....@...A......
$08B0 08 11 00 D0 05 0B 23 38 30 30 00 08 CA 08 09 00 ......#800......
$08C0 D0 06 09 4E 4C 00 00 00 00 00 D8 08 11 00 D0 07 ...NL...........
$08D0 0C 36 35 30 30 30 E8 FD E5 08 09 00 D0 08 08 4C .65000.........L
$08E0 00 00 00 00 00 EF 08 11 00 D0 09 08 31 01 00 FB ............1...
$08F0 08 10 00 D0 10 0C 52 45 4E 55 4D 00 00 00 00 D0 ......RENUM.....
$0900 11 20 .
Qui donne ceci en principe, sauf que moi je bute sur la ligne 65030 :
65000 ]RENUM
65010 N=10:P=10:A=#800
65020 WHILE NL<65000
65030 L=PEEK(A):DOKE A+1,N:A=A+L:NL=DEEK(A+1):N=N+P
65040 WEND
65050 END
Du coup, si ça ne t'embête pas je veux bien que tu me passes ton code pour essayer d'y voir plus clair et tenter de comprendre d'où viennent mes erreurs.
Merci d'avance.
@+
damien.
@damien; Je viens de te l'envoyer via la messagerie interne du site.
Super, merci assinie.
Je n'ai que très peu de connaissance de Python alors ça va me prendre un peu de temps pour décortiquer ça.
@+
damien.
Le principe est assez simple.
Le programme commence par lire la table des variables. Pour chaque entrée dans cette table, le 7ième octet indique la longueur+7 de la chaine qui représente la variable. Cette chaine débute toujours au 8ième octert de l'entrée.
Ensuite il charge la parte programme Hyperbasic e tpour chaque ligne de code il récupère son numéro (octets 2 et 3) et pour chaque octet à partir du 5ième
- si sa valeur est < $D0, il s'en sert comme clé pour la table des tokens et affiche le résultat
- si sa valeur est >=$D0, il s'agit d'une variable et donc il prend cet octet et le suivant et se sert de cette valeur comme clé dans la table des variables puis affiche le résultat
et ainsi de suite jusqu'à la fin du porigramme source
@assinie : En gros c'est ce que j'ai codé de mon côté également.
J'ai trouvé mes erreurs, y a plus qu'à traiter la mise en forme (indentation, espaces, etc.)
Encore merci pour tes conseils.
@+
damien.
Les seules fonctions utiles sont load_table(fname) et list_source(fname)
fname est le nom du fichier à lire.
load_tokens() ne fait que charger le tableau des tokens, les autres fonctions ne sont que des utilitaires qui m'ont servi pour voir le contenu du fichier brut et ne sont pas utiles pour décoder le programme.
Pour les indentations, c'est qui est fait entre les lignes 145 et 161
@assinie : voilà, c'est tout bon, il me reste à ajouter un peu de colorisation syntaxique mais je pense que je vais faire le minimum : la numérotation des lignes ça suffira bien...
@+
damien.
@damien: content d'avoir pu t'aider
Voilà, c'est intégré dans la v2.3.0.0 publiée il y a quelques minutes.
@assinie : encore merci de ton aide. 👍
@+
damien.