C'est un procédé que j'utilise quotidiennement maintenant, mas c'est en dehors de l'éditeur Panoramic.
Celui-ci je l'ai adapté à Panoramic. Il sera peut-être utile à l'un d'entre-vous.
Il consiste à un programme qui lit en premier un fichier texte, qui contient une liste de programme qui utilise ce procédé.
Le programme qui sera appelé est précédé d'un ">" devant le nom du fichier. Je sais qu'au départ cela fait beaucoup de petites choses, mais ensuite ça facilite la manipulation.
cela donne par exemple:
- Citation :
- ' mettre un ">" devant le fichier à charger
>C:\COURRIER\éditeur.txt
C:\TESTE\marmelade.txt
dont le programme choisira ici la partie en gras.
Le fichier qui sera lu, aura la liste des fichiers à assembler, comme par exemple:
fichier: C:\COURRIER\éditeur.txt
- Citation :
- C:\HTML\editeur\PRG\éditeur_0html.bas
C:\HTML\editeur\PRG\éditeur_0.1html.bas
C:\HTML\editeur\PRG\éditeur_0.2html.bas
Maintenant le programme va lire chacun des fichiers pour les assembler dans un même list.
Il va ensuite les lire ligne par ligne pour voir si l'instruction #include est présente, auquel cas il ira chercher le programme pour l'inclure, car l'instruction CHAIN qui suivra au final, ne sait pas le faire.
Ainsi pour un grand programme, vous pouvez avoir dans un onglet les définitions des labels et des dim, si la liste est longue, ce qui permettra de ne pas avoir à remonter en haut d'un programme pour rajouter une variable ou un label. Dans un autre onglet, les objets. Dans un autre onglet une partie du programme à mettre au point, et dans un autre le restant du programme.
Le programme suivant est à transformer en exécutable après avoir mis le bon chemin du fichier à lire au départ.
- Code:
-
' assemble plusieurs fichiers.bas
hide 0
dim a$,a% ,b% , b$ , include
dlist 1
dlist 2
dlist 3
file_load 1,"C:\COURRIER\Nom_prg.txt"
repeat
a$=item_read$(1,1)
item_delete 1,1
until left$(a$,1)=">" or scancode = 27 :' si oui, on a la ligne du fichier à charger
if scancode = 27 then end
a$=mid$(a$,2,len(a$)) : ' on enlève ">"
if file_exists(a$) =1
file_load 1,a$ :' on lit le nom du premier fichier contenant les programmes à assembler
a$=item_read$(1,1)
if file_exists(a$)=1 :' on charge le 1er
file_load 2,a$
end_if
end_if
item_delete 1,1 :' on retire la première ligne qui est chargée
if count(1)>0
for a%=1 to count(1)
a$=item_read$(1,a%)
' essaye de raccorder plusieurs fichiers pour recomposer le prg
if file_exists(a$)=1
file_add 2,a$
end_if
next a%
' =====================
' on lit chaque ligne du programme recomposé, et on les ajoute à 1,
clear 1 :' et on vérifie si il y a des includes
repeat
include = 0
for a%=1 to count(2)
a$=item_read$(2,a%):b$=lower$( trim$(a$))
if left$(a$,8)="#include" :include=1
b$=mid$(b$, instr(b$,chr$(34))+1 ,len(b$) )
b$=left$(b$,len(b$)-1)
file_load 3,b$
if count(3)>0
for b%=1 to count(3)
a$=item_read$(3,b%)
item_add 1,a$
next b%
end_if
else
item_add 1,a$ :' ligne normale
end_if
next a%
clear 2 : clear 3
if include=1
for a%=1 to count(1) :item_add 2,item_read$(1,a%):next a%
end_if
until include = 0 or scancode =27
file_save 1,"c:\temp\trace.bas"
chain "c:\temp\trace.bas"
end_if
Pour changer de programme, on lit le fichier texte ici: "C:\COURRIER\Nom_prg.txt"
On modifie ce fichier en enlevant ">", et en le mettant devant un autre fichier d'assemblage.
Inutile de dire qu'il faut à chaque modification d'un des programme d'un onglet, il faudra sauvegarder.
Ensuite le plus simple est de mettre un raccourcis dans la barre de lancement rapide de l'exécutable.
En procédant de cette façon, l'éditeur Panoramic est préservé, et des blocages, et de l'obligation d'ouvrir un nouvel onglet pour ravoir la fonction RUN de celui-ci.
Cela ressemble un peu à un programme que j'ai déjà donné, mais ici il y a l'assemblage en plus.
Je rajoute que si il y a une erreur sur une ligne, on relit le programme C:\temp\trace.bas.
Le mieux est d'ouvrir celui-ci dans un éditeur qui s'actualise des modifications, ainsi on le met en réduit, et on le reprend pour savoir de quelle ligne il s'agit. Clà marche avec Edit-Pad, Note_Pad, PsPad, et bien d'autre.