FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Panoramic et ses curiosités
par Jean Claude Aujourd'hui à 21:48

» Synedit Parameters
par Jean Claude Aujourd'hui à 21:15

» Utilitaire de suppression de fichiers
par Jean Claude Aujourd'hui à 21:11

» Code à vérifier SVP (Oups ! résolu)
par Jean Claude Hier à 21:16

» Compilateur FBPano
par jean_debord Hier à 9:56

» Bienvenue à Virtualalan !
par UltraVox Hier à 9:18

» Concours de Morpions
par jjn4 Hier à 0:04

» ShortName$(F) [Cloturé]
par papydall Mer 21 Juin 2017 - 16:19

» Remplacer espace par tiret dans noms des dossiers / fichiers
par papydall Mer 21 Juin 2017 - 15:27

» Menu personalisé avec icones et menu contextuel
par Laurent (Minibug) Mer 21 Juin 2017 - 12:44

» La liste des choses à faire ...
par Jack Mar 20 Juin 2017 - 22:49

» Quoi de neuf à propos de Goric 3D ? (@Jack)
par UltraVox Mar 20 Juin 2017 - 21:06

» Nom court et anti fenetre dos
par silverman Mar 20 Juin 2017 - 18:31

» Ludothèque Panoramic
par jjn4 Mar 20 Juin 2017 - 18:09

» Proposition à la communauté
par Yannick Mar 20 Juin 2017 - 15:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Juin 2017
LunMarMerJeuVenSamDim
   1234
567891011
12131415161718
19202122232425
2627282930  
CalendrierCalendrier

Partagez | 
 

 Module pour lancer un programme avec des INCLUDES et des SUB

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Invité
Invité



MessageSujet: Module pour lancer un programme avec des INCLUDES et des SUB   Mer 26 Sep 2012 - 2:22

De toute façon il fallait que je le fasse pour mon nouvelle ordi, vu que je n'avais pas encore intégré les includes dans mes fonctions chain.
Et comme j'étais provisoirement sur un autre programme que j'intégré à mon loder pour mettre des notes, je l'ai intégré à celui*ci.
Que fait ce programme: c'est une petite fenêtre placée en haut:


Il y a un bouton choisir: clui-ci affiche une liste au départ, où on ajoute un nouveau programme à cette ci en cliquant dessus:


Donc on peut ajouter des fichiers, mais si on clique sur l'un des items, on le lance. Il est à noter que le programme lit le fichier, donc à chaque modification, il faut sauvegarder.

Ensuite on voit un bouton MDP pour mot de passe. Ce bouton demande au départ un mot de passe. La confidence est que le mot de passe change toutes les minutes, mais une fois donné, il reste valide jusqu'à ce qu'on le ferme: le mot de passe est l'heure en rouge. Ce programme est surtout fait pour qu'on ne puisse lire les notes à partir du WEB ou de son entourage, si vous en gardez le secret. Car le contenu est systématiquement codé à la sauvegarde, le memo qui s'affiche se vide. A chaque appuie sur ce bouton, le contenu est relu si le MDP est valide. La sauvegarde se fait en double-cliquant sur le memo.


Un exemple de ce que cela donne comme fichier (ce n'est pas le texte de l'exemple, donc inutile de faire un rapprochement avec le code du programme)

Citation :
Ddbjfruto!fttbj!qnvqBDdbjfruto!bvusf!udysd!ptf!i&fowpjd!qnts!mb!oqèrdmu`uhpm

Si on ferme la fenêtre par la croix, il n'y a pas de sauvegarde du contenu, c'est le contenu à l'ouverture qui est relu.

Vous avez sur le côté un list avec 26 autres possibilités de note. C'est la même fenêtre qui est utilisée pour les notes. Si vous avez peur de perdre le contenu, une fois la note sélectionnée, il y a un bouton copie. A côté il y a un petit bouton avec un sens interdit. Celui-ci annule le MDP. Et le suivant ferme le programme comme l'appui sur la forme colorée.

Pour le programme, il faut générer au départ les lignes de data pour le codage. C'est ici 1000 nombres de 1 à 1000 dans n'importe quel ordre. C'est l'ordre de sauvegarde de chaque caractère. Comme une phrase a un nombre indéfini de caractère, au codage, les datas sont relus à la suite pour n'utiliser que les nombres qui vont de 1 à len(de la chaine). De plus les caractères sont modifiés. A vous de lire le programme.

Donc au départ, il faut enlever le commentaire à la ligne: 8
Code:
' melange(1000)  : end

En lançant le programme, celui-ci va donc généré des lignes de datas qu'il faudra recopier, et les rajouter à la fin du programme. Ceci permet à chacun d'avoir son propre codage.
Peut-être me trouvez-vous parano, mais il y a 4 ans, on a réussi en Europe à (Angleterre, France, Allemagne, Turquie...) me retirer plus de 2000 euros, alors que je n'en ai pas. Comme je ne garde pas de document de carte ou de mot de passe sur moi, cette chose n'a pu se faire à mon sens que par internet. Aussi pour chaque nouvel ordi, je prend mes précautions. Il n'y a que ce programme, et ses lignes de datas qui puisse décoder mes notes.

Une fois les lignes de datas intégrées, on remet la ligne en commentaire.

Code:
width 0,330:height 0,290 :hide 0  :error_french
label note,fin,temps,vide ,branche , copie  ,valide , mdp_nul , note_plus , teste, lancer_prg , clic_item , ajout_item , annule
dim f$ ,p$ ,tx$ , f_n$ ,not$
dim a% ,a$ ,result$ , c%,c$ ,d$,d% , mdp% , prov$ , f_liste$ , f_chain$ , f_execute$
dim tri%(70000)

rem ligne suivante, la lancer au départ pour faire la liste de data à recopier en fin de programme, puis mettre en comentaire.
' melange(1000)  : end
tri(1000)
' ============================================================================================================================ '

f$=          "c:\PANO\Note_essai.txt"      :' sauvegarde criptée des notes dans le liste (A,B,C,D...Z)
not$=        "c:\PANO\NOTE_essai_"          :' sauvegarde criptée des mots de passe
prov$=      "c:\PANO\temp\"                :' sauvegarde temporaire pour connaitre les retours chariots
f_chain$ =  "C:\PANO\envoi nom fichier.txt":' écriture du nom du fichier choisi pour être lancé par le loader
f_liste$ =  "C:\PANO\clic_fichier.txt"    :' liste des programmes à lancer sur un clic
f_execute$ = "C:\PANO\loader_multiple.exe"  :' Programme lançant l''exécution du programme par la fonction chain

open_dialog 1
' ================================================================'
list 2:width 2,310:height 2,200:top 2,40 :on_click 2,clic_item
if file_exists(f_liste$) = 1 then file_load 2,f_liste$
button 3:caption 3,"ajouter fichier" :on_click 3,ajout_item
button 4:caption 4,"annule":left 4,90:on_click 4,annule
' ================================================================'

form 10:width 10,250:height 10,20:border_hide 10:left 10,screen_x - 600 :color 10,223,242,255
alpha  5 :parent 5,10:top 5,22:left 5,10:font_color 5,255,0,0:caption 5,left$(time$,5):height 5,12:font_bold 5
alpha  7 :parent 7,10:top 7,22:left 7,50:font_color 7,0,0,255:caption 7,date$

button 11:parent 11,10:width 11,35:height 11,18:caption 11,"run":on_click 11,teste :font_size 11,4
button 12:parent 12,10:width 12,35:height 12,18:caption 12,"choisir":left 12,37 :font_size 12,4 :hint 12,"choisir le programme à lancer"
         on_click 12,lancer_prg

button 9 :parent 9,10:        left 9,75 :caption 9,"copie":height 9,18:width 9,40:on_click 9,copie:hint 9,"copie la dernière note ouverte"
button 8 :parent 8,10:        left 8,117:caption 8,"M.D.P.":on_click 8,note:height 8,18:width 8,40 :font_size 8,6

button 16:parent 16,10:top 16,01:left 16,160:width 16,15:height 16,17:font_name 16,"Webdings":caption 16,"x":on_click 16,mdp_nul:font_bold 16 :font_size 16,6
button 17:parent 17,10:top 17,01:left 17,177:width 17,15:height 17,17:font_name 17,"Webdings":caption 17,"£":on_click 17,fin:font_bold 17 :font_size 17,6
      hint 16,"remet les notes au secret":hint 17,"ferme le programme"
list  15 :parent 15,10:left 15,198:width 15,45: for a%=65 to 90:item_add 15,chr$(a%) : next a%  :font_size 15,4
      height 15,45:on_click 15,note_plus
show 10
dlist 13
on_click 10,fin
timer 6:timer_interval 6,30000:on_timer 6,temps

form  20 :left 20,left(10)-550 : width 20,500:height 20,200:border_small 20  :on_close 20,vide:caption 20,"double_clic: enregistre"
memo  21 :parent 21,20 : full_space 21:font_size 21,10  :  on_double_click 21,branche : hide 20

form 30:width 30,300:height 30,90:left 30,screen_x/2 - 150 : top 30,screen_y/2 - 45:hide 30: caption 30,"Entrez-le mot de passe"
edit 31:parent 31,30:left 31,10:top 31,10:secret_on 31:width 31,180:font_size 31,12
button 32:parent 32,30:left 32,200:top 32,10:caption 32,"valide" :on_click 32,valide
end
' &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
vide:
    clear 21
    wait 500:hide 20:timer_on 6
    return
branche:
    if number_double_click = 21 then save()
return
copie:
    if message_confirmation_yes_no("Etes-vous sûr de copier le contenu") = 1
      file_load 13,f$:file_save 13,left$(f$, len(f$)-4)+"_copie.txt"
    end_if
return
' ========================================'
note_plus:
    timer_off 6
   f_n$=not$+ item_index$(15)+".txt"
   secret()
return
' =============================================================================='
note:
    timer_off 6
    f_n$=f$
   secret()
return
' ---------'
sub secret()
   if mdp%=0 then show 30:color 10,223,242,255 :else :color 10,228,229,151 :gosub valide
   ' en appuyant sur valide, on se branche à valide
end_sub

valide:
   hide 30
   if text$(31) = caption$(5) then mdp%=1 :color 10,228,229,151 :text 31,""
   if mdp%=1
      show 20 : if file_exists(f_n$) = 1 then decode(f_n$)
    end_if
return
' ------------------------------
sub decode(c$)
  dim_local c%,c$,a$ ,d$,d%,a%,b$
  if file_exists(f_n$) = 1
      file_open_read 1,f_n$ 
     file_read 1,d$
     file_close 1
  end_if
  b$=""
  for a% =1 to len(d$)
      c%= asc(mid$(d$,a%,1))
      if even(tri%(a%))=1
        c%=c%-1
      else
        c%=c%+1
      end_if
      b$=b$+chr$(c%)
  next a%
  clear 21
  repeat
      c%=instr(b$, "®" )
      if c% >0 then a$=left$(b$,c%-1):item_add 21,a$:b$=mid$(b$,c%+1,len(b$))
  until c%=0 or scancode =27
  item_add 21,b$
end_sub

' ==============================================================================
sub save()
    font_color 21,255,0,0
    dim_local a%,d$ ,c% ,b$ : d$=""                 
    if count(21) > 0
        file_save 21,prov$+"sauve.txt"
        file_open_read 1,prov$ + "sauve.txt"
        while file_eof(1) <> 1
            file_readln 1,c$
            d$ = d$ + c$ + "®"
        end_while
        file_close 1
        c$ = left$(d$,len(d$)-1 ) :' on retire le dernier return

        file_open_write 21,f_n$  :  file_writeln 21,c$ : file_close 21    :' provisoire pour controle'
        for a%=1 to len(c$)
          c%=asc(mid$(c$,a%,1)) :  if c%=9 then c%=32
          if even(tri%(a%))=1
              b$=b$ + chr$(c%+1)
          else
              b$=b$ + chr$(c%-1)
          end_if
        next a%
        file_open_write 21,f_n$  :  file_writeln 21,b$ : file_close 21
     end_if
    font_color 21,0,0,0 :clear 21 : hide 20:timer_on 6
end_sub
' &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

temps:
caption 5,left$(time$,5)
return
' @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'

sub encode()
  dim_local b$,a%,c%,d$ :b$="" :d$=""
      if count(21) > 0
         for a%=1 to count(21)
             d$= d$ + item_read$(21,a%) :  if a% < count(21) then d$=d$ +"¤"
         next a%
        for a%=1 to len(d$)
          c%=asc(mid$(d$,a%,1))
          if even(tri%(a%))=1
              b$=b$ + chr$(c%+1)
          else
              b$=b$ + chr$(c%-10)
          end_if
        next a%
        result$=b$
        file_open_write 21,f_$  :  file_writeln 21,b$ : file_close 21
     end_if
end_sub
' -----------------------
mdp_nul:
  mdp%=0:color 10,223,242,255
return

' ------------------

sub tri(nb%)
  dim_local a%,b%,b$,i% ,c%  :  restore
  for a%=1 to nb%
      read b%  :  for c%=0 to 66 : tri%( a% + nb%*c% ) = b% :  next c%
  next a%:  i%=1  : restore
  rem on limite à la longueur de a$

  for a%=1 to nb%*66  :' nb de data
      repeat
            read b% : if b% <=len(a$) then tri%(i%)=b% : i%=i%+1 :' i% jusqu''à len(a$)
      until i%=a% or scancode =0
      if i% > len(a$) then exit_for
    next a%
end_sub
' --------------'
sub melange(nb%)
dim_local a% , b% ,a$ ,b$ ,c%
a$=" ": b$="Data "

for a%=1 to nb%:' 10000
caption 0,str$(a%)+"  -  "+str$( count(1))
  repeat
      b%=rnd(nb%-1) +1 +(nb%*c%)
      if instr(a$," "+str$(b%)+" ") = 0 then tri%(a%)=b%:a$=a$+str$(b%)+" " : b%=-1
  until b%=-1 or scancode = 27
  b$=b$+str$(tri%(a%))
  if len(b$)< 145
      b$=b$+","
  else
      item_add 1,b$ :b$="Data "
  end_if
  if scancode = 27 then exit_for
next a%
if len(b$) > 5 then item_add 1,left$(b$,len(b$)-1)
item_add 1,"' ----------------------------------------"

end_sub

' =============================================================================='
teste:
   timer_off 6
 inactive 11
 if p$="" then active 11:return
clic_item:
timer_off 6
p$ = item_index$(2)

file_open_write 1,f_chain$
  FILE_WRITELN 1,p$
FILE_CLOSE 1

execute f_execute$
hide 0:show 10:set_focus 10
active 11 :active 12 :timer_on 6
return
' =========================

ajout_item:
  filter 1,"choisir un programme .bas|*.bas;*.bak"
  f$ = file_name$(1)
  if f$ <> "_" then item_add 2,f$:file_save 2,f_liste$
  active 12:timer_on 6
return
' ==========================
lancer_prg:
  timer_off 6
  inactive 12
  show 0
return

' ==========================
annule:
  hide 0 :active 12 : timer_on 6
return

fin:
if message_confirmation_ok("on quitte vraiment ?") =1 then terminate

Pour moi le dossier est "C:\PANO\".
C'est à vous de définir dans le cas vous acceptez ce programme, votre dossier pour mettre le programme.
Comme c'est une fonction CHAIN:, il faut aussi un autre programme en arrière temps, qui se fermera à chaque lancement.

Le programme précédent est le programme de sélection qui reste ouvert.
Le programme qui assemble les includes, et lance le programme cliquée, c'est celui-ci. Les deux programmes sont des exécutables:

Code:
' Auteur : cosmos70
hide 0
dim a$ , f$
f$ =  "C:\PANO\envoi nom fichier.txt":' écriture du nom du fichier choisi pour être lancé par le loader

dlist 1 :' width 1,3000 : ' mettre large pour éviter les sauts de ligne
dlist 3 :' left 3,300
dlist 4 :' top 4,200
dlist 6 :' top 6,200:left 6,300
' bar_both 1:bar_both 3:bar_both 4:bar_both 6
if file_exists(f$)=1
  FILE_OPEN_READ 1,f$
  FILE_READLN 1,a$
  FILE_CLOSE 1
else
  '  message "pas trouvé"
end_if
' caption 0,a$
if file_exists(a$)=1  then file_load 3,a$
if count(3)>0  then include() : chain "c:\PANO\panoramic.bas"      : ' puis on exécute...
end
' =============================================================================='

sub include()
dim_local a%,b%,a$,v%,c$,lig_a% ,include% ,c%
  if count(3)> 1
      b%=0 :' pour numéroter les #include
      a%=1
      repeat
        a$=item_read$(3,a%)
        ' je rajoute éventuellement les includes
        if left$(upper$(trim$(a$)),8)="#INCLUDE"
            v%=instr(upper$(a$),"#INCLUDE ")  :b% = b% + 1 :c$ = mid$(a$, v% + 9 , 80) : item_add 4,trim$(a$)
            item_add 1,"' #" + str$(b%) + " dépilé: " + trim$(a$)
            include%=1
            file_add 6, c$ : lig_a%=a%+1
            item_insert 3,a%+1,"' ==== FIN du programme #INCLUDE dépilé: "+c$+"  #"+str$(b%)+" ===="
            for c%=1 to count(6)
              a$=item_read$(6,1) : item_insert 3,lig_a%,a$ : item_delete 6,1:lig_a%=lig_a%+1
            next c%
        else
            item_add 1,a$
        end_if
        a%=a%+1
      until a% > count(3) or scancode=27
  end_if
  item_add 1,""
  file_save 1,"c:\PANO\panoramic.bas" : ' on sauvegarde le contenu
end_sub

Certainement il y aura des questions, sur la gestion des dossiers. Le premier programme doit avoir le nom du fichier du lanceur dans f_execute$ ainsi que le nom du programme choisi qui est dans: f_chain$

Le fichier liste du haut est: f_liste$
Bien il est temps de Sleep

J'ai oublié dire qu'une fois choisi, le même programme peut être lancé avec le bouton RUN.
Ce programme permet de faire fonctionner un programme avec n'importe quel éditeur, y compris avec le bloc-note ou Panoramic_Editor.
Revenir en haut Aller en bas
Invité
Invité



MessageSujet: Re: Module pour lancer un programme avec des INCLUDES et des SUB   Mer 26 Sep 2012 - 13:42

Une erreur par copie de partie de code avait été commise. C'est corrigée.
Revenir en haut Aller en bas
Jicehel

avatar

Nombre de messages : 5838
Age : 44
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Module pour lancer un programme avec des INCLUDES et des SUB   Mer 26 Sep 2012 - 14:10

Sympa.
Je teste ça ce soir. Je pense que je rajouterais pour moi l'ouverture d'un petit fichier de config en début de programme pour mettre les chemins comme ça si les programmes sont compilés, les chemins ne seront pas en dur dans les exe Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Invité
Invité



MessageSujet: Re: Module pour lancer un programme avec des INCLUDES et des SUB   Mer 26 Sep 2012 - 15:10

Merci.
Je mets les chemins en dur, car là je n'ai pas de problèmes, surtout avec le trafic que je peux faire avec un ordi. J'ai pas vraiment trouvé de solution pour que cela marche sans problème à un moment ou un autre avec des chemins relatifs.
<je mets 3 programmes de teste pour include:
le premier programme appel un deuxième avec include, qui lui-même appel un (sous) include. Il y a imbrication. Pour chacun des petits programmes, il faut adapter le chemin d'appel du suivant. Rappel: #INCLUDE est une directive et ne fonctionne pas avec une variable, quoique qu'avec ce principe il serait possible de faire une commande pour qu'include soit appelé autrement, vu que chaque ligne est balayée pour être reconstruite.

Programme de départ:

Code:
dim a% ,a$ ,b%,couleur%
rem  'programme d'appel pour les autres includes
#include "c:\PANO\TESTE\M_au _P_TRACE\inclusion.bas"


rem 'retour des includes, suite du programme d'appel
END
modifier le chemin de l'include pour mettre sur le nom du fichier du programme N°2

Programme n°2:

Code:
 ' 1ère ligne du programme "inclusion.bas"
a$="inclusion"    :  b%=12874  :  couleur%=12
 for couleur%=1 to couleur%:next couleur%
 message "inclusion réussi"
 
 ' appel d'un include en position 2
 rem '==fin mais appel d'un include: "suite_include.bas"==
#include "C:\PANO\TESTE\M_au _P_TRACE\suite_include.bas"

idem dans ce programme, mettre le nom du suivant.

Programme N°3:

Code:
 ' essai de rajouter un nouvel include
 message "include sous_niveau"
rem sortie "suite_include.bas"

Voila! Voila! Voila!

J'ai oublié: Dans choisir: lorsqu'on ajoute un programme, c'est le nom du premier qu'il faut mettre.
Revenir en haut Aller en bas
Jicehel

avatar

Nombre de messages : 5838
Age : 44
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Module pour lancer un programme avec des INCLUDES et des SUB   Mer 26 Sep 2012 - 15:34

Ah oui, j'avais oublié ce détail du fait que l'on ne pouvait pas utiliser de variables... c'est bien dommage.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Invité
Invité



MessageSujet: Re: Module pour lancer un programme avec des INCLUDES et des SUB   Mer 26 Sep 2012 - 16:55

Je viens de faire un essai, que je mets ici.
Le chemin de l'include, je le mets en haut selon la syntaxe suivante:
' #NAME|1|chemin

' #NAME|1|c:\PANO\TESTE\M_au _P_TRACE\inclusion.bas et si voulez, on peut faire ceci:
' #NAME|1|c:\PANO\TESTE\M_au _P_TRACE\inclusion.bas| commentaire comme repère
autre nom:
' #NAME|2|C:\PANO\TESTE\M_au _P_TRACE\suite_include.bas
Le nom est mis dans un dlist, et retrouve le chemin selon le n°.

Et pour include, ceci:
#INCLUDE |1|
ou
#INCLUDE |2|
Cela concerne le lanceur, c'est à dire le programme n°2

Code:
' Auteur : cosmos70
hide 0
dim a$ , f$ , check$(10) ,a% , Nb_coord%
f$ =  "C:\PANO\envoi nom fichier.txt":' écriture du nom du fichier choisi pour être lancé par le loader

dlist 1 :' width 1,3000 : ' mettre large pour éviter les sauts de ligne
dlist 3 :' left 3,300
dlist 4 :' top 4,200
dlist 6 :' top 6,200:left 6,300
dlist 7 :' sert à entrer les noms d''include
   for a%=1 to 100:item_add 7,"":next a%
' bar_both 1:bar_both 3:bar_both 4:bar_both 6
if file_exists(f$)=1
  FILE_OPEN_READ 1,f$
  FILE_READLN 1,a$
  FILE_CLOSE 1
else
  '  message "pas trouvé"
end_if
' caption 0,a$
if file_exists(a$)=1  then file_load 3,a$
if count(3)>0  then include() : chain "c:\PANO\panoramic.bas"      : ' puis on exécute...
end
' =============================================================================='
sub EXPLODE(separ$,chaine$)
  dim_local explode%
  dim_local copie$ , v_explode%
  for explode%=1 to 10:check$(explode%)="":next explode%
  explode%=1:copie$=chaine$
  if right$(copie$,1)<> separ$ then copie$ = copie$  +separ$
  repeat
      v_explode%=instr(copie$, separ$ )
      if v_explode%>0 then check$(explode%)=left$(copie$,v_explode%-1):copie$=mid$(copie$,v_explode%+1,len(copie$)):explode%=explode%+1
  until v_explode%=0:Nb_coord%=explode%-1
END_SUB

sub include()
dim_local a%,b%,a$,v%,c$,lig_a% ,include% ,c% , n% , n$
  if count(3)> 1
      b%=0 :' pour numéroter les #include
      a%=1
      repeat
        a$=item_read$(3,a%)
        ' je rajoute éventuellement les includes
        if left$(upper$(trim$(a$)),8)="#INCLUDE"  :' syntaxe si NAME: #INCLUDE |N°|
            v%=instr(upper$(a$),"#INCLUDE ")  :b% = b% + 1 :c$ = mid$(a$, v% + 9 , 80)
            if instr(a$,"|") >0
                explode("|",a$ )
                n%=val(check$(2))
                c$=item_read$(7,n%)
                a$="#INCLUDE "+chr$(34)+c$+chr$(34)
            end_if
            item_add 4,trim$(a$)
         ' ___'
            item_add 1,"' #" + str$(b%) + " dépilé: " + trim$(a$)
            include%=1
            file_add 6, c$ : lig_a%=a%+1
            item_insert 3,a%+1,"' ==== FIN du programme #INCLUDE dépilé: "+c$+"  #"+str$(b%)+" ===="
            for c%=1 to count(6)
              a$=item_read$(6,1) : item_insert 3,lig_a%,a$ : item_delete 6,1:lig_a%=lig_a%+1
            next c%
        else
            if left$(upper$(trim$(a$) ),7 )="' #NAME"  :' syntaxe: ' #NAME|1|chemin
                rem prendre le n° et le nom qui servira à l'include
                explode("|",trim$(a$))
                n%=val(check$(2))  :  n$=check$(3)
                item_delete 7,n%
                item_insert 7,n%,n$
            end_if
            item_add 1,a$
        end_if
        a%=a%+1
      until a% > count(3) or scancode=27
  end_if
  item_add 1,""
  file_save 1,"c:\PANO\panoramic.bas" : ' on sauvegarde le contenu
end_sub

Ce qui donne pour les programmes testes:
celui qu'on appelle:
Code:
dim a% ,a$ ,b%,couleur%
' #NAME|1|c:\PANO\TESTE\M_au _P_TRACE\inclusion.bas
rem  'programme d'appel pour les autres includes
#INCLUDE |1|


rem 'retour des includes, suite du programme d'appel
END
le suivant:
Code:
 ' 1ère ligne du programme "inclusion.bas"
 ' #NAME|2|C:\PANO\TESTE\M_au _P_TRACE\suite_include.bas
a$="inclusion"    :  b%=12874  :  couleur%=12
 for couleur%=1 to couleur%:next couleur%
 message "inclusion réussi"
 
 ' appel d'un include en position 2
 rem '==fin mais appel d'un include: "suite_include.bas"==
#include |2|
le troisème n'ayant pas d'appel, ne change pas.

On peut en reparler, car il est possible à ce moment là d'avoir une liste des includes, et simplement les numéroter. Là ça nécessite d'adopter le programme.
Il est à noter que le programme recomposé dans l'ensemble peut être récupéré. Il suffit de regarder ceci: pour moi c'est dans la ligne: chain "c:\PANO\panoramic.bas"

Je suis désolé de ne pas faire des choses simples qui rebutent les nouveaux et Jack. C'est mon problème.

Je trouve que le principe de liste n'est pas idiot. Je vais me l'adapter.
Ainsi: comme idée: "' #NAME |1|5|10|"
inclura directement les includes aux emplacements #include
Revenir en haut Aller en bas
Invité
Invité



MessageSujet: Re: Module pour lancer un programme avec des INCLUDES et des SUB   Jeu 27 Sep 2012 - 1:29

Je suis reparti de l'idée précédente de faire une liste des includes.
Pour les essais que j'ai donné plus haut avec includes, cela donne ceci:

Citation :
c:\PANO\TESTE\M_au _P_TRACE\inclusion.bas |1 | teste include
C:\PANO\TESTE\M_au _P_TRACE\suite_include.bas |2 | suite teste include

Pour ce faire, coder un programme avec des includes avec cette méthode, nécessite de pouvoir voir la liste facilement. J'ai donc rajouté un bouton qui permet de voir cette liste, et de la compléter au fur et à mesure:

En cliquant dessus: on voit le memo:
les commentaires sont optionnels mais les séparateurs sont obligatoires: |
N° de ligne et explication de ce fait cet include.
Le memo permet de modifier ou rajouter d'autre fichier. Evidemment il n'y a pas de mot de passe pour cet affichage, et la sauvegarde est aussi un double-clics sur le memo.
Le 1er programme devient sans les datas:
Spoiler:
 
Pour le lanceur: la fontion NAME n'existe plus, vu que c'est à partir d'une liste que le chemin est trouvé.
Pour appeler un include:
#INCLUDE |N°|
Le n° étant le n° de ligne dans la liste.

Le programme n°2 devient:
Spoiler:
 
Les programmes testes:
Spoiler:
 
Je pense qu'on peut arrêter là.

correction d'un bug avec les notes à cause des variables locales qui se réaffectaient.29/09/12 à 00:30h


Dernière édition par cosmos70 le Sam 29 Sep 2012 - 1:33, édité 3 fois
Revenir en haut Aller en bas
Jicehel

avatar

Nombre de messages : 5838
Age : 44
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Module pour lancer un programme avec des INCLUDES et des SUB   Jeu 27 Sep 2012 - 8:42

Beau boulot Cosmos Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Module pour lancer un programme avec des INCLUDES et des SUB   

Revenir en haut Aller en bas
 
Module pour lancer un programme avec des INCLUDES et des SUB
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Gps pour infimier remplacant avec plusieurs tournées de patient
» Protéger son logiciel.
» Comment faire pour donner mon code pour un partenariat avec une boutique
» Problème pour certains membres avec AlloPass
» Code pour mettre l'intérieur cadre de citation en couleur

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC 32 bits :: Vos sources, vos utilitaires à partager-
Sauter vers: