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
» Pb 16 (en analyse): ON_CLOSE plante à l'exécution
par Jack Aujourd'hui à 20:00

» Pb 15 (en analyse): TIMER_ON plante à l'exécution
par Jack Aujourd'hui à 19:58

» Compilateur FBPano
par jean_debord Aujourd'hui à 8:49

» un nouveau editeur panobasic
par Jean Claude Hier à 20:05

» COMPILATEUR V 0.9 beta 7 du 10 aout 2017
par Pedro Alvarez Hier à 19:31

» KGF_dll - nouvelles versions
par Yannick Dim 13 Aoû 2017 - 17:35

» probleme d'outil
par Yannick Dim 13 Aoû 2017 - 17:32

» Carte de France des régions
par Yannick Sam 12 Aoû 2017 - 21:33

» Pb 14 (en analyse): PRINT_LOCATE plante à l'exécution
par Jack Ven 11 Aoû 2017 - 22:37

» Petit avertissement [Mots réservés]
par papydall Ven 11 Aoû 2017 - 13:45

» Distances sur plan
par JL35 Jeu 10 Aoû 2017 - 21:29

» Tracé : Triangle, Carrée, Dents de scie, Sinusoïde redressée
par papydall Jeu 10 Aoû 2017 - 14:52

» Troncature dans une image
par JL35 Mer 9 Aoû 2017 - 13:45

» A chacun son point de vue
par papydall Mar 8 Aoû 2017 - 17:20

» Problème avec les chaines de caractères
par bignono Dim 6 Aoû 2017 - 9:33

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Août 2017
LunMarMerJeuVenSamDim
 123456
78910111213
14151617181920
21222324252627
28293031   
CalendrierCalendrier

Partagez | 
 

 Créer un EXE dans un programme Panoramic ?

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : 1, 2  Suivant
AuteurMessage
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Créer un EXE dans un programme Panoramic ?   Jeu 27 Oct 2016 - 17:29

J'ai fait un petit code en Panoramic pur qui peut créer un EXE à partir d'un source Panoramic quelconque. Est-ce que ça iintéresse quelqu'un ?

En Panoramic pur, c'est assez lent (30 à 40 secondes). Avec l'utilisation d'une fonction dans KGF.dll, ça pourrait être réduit à une seconde. Voici la version en Panoramic pur (il faut donner le nom de l'EXE en sortie dans une variable, et le source est à copier dans le mémo de gauche. Le mémo de droite, juste pour contrôle, montre le source encodé façon Panoramic:
Code:
label encoder

dim nom$

full_space 0
alpha 1 : top 1,10  : left 1,10  : caption 1,"En clair:"
alpha 2 : top 2,10  : left 2,520  : caption 2,"Encodé:"
memo 11 : top 11,40 : left 11,10  : width 11,500 : height 11,600 : bar_both 11
memo 12 : top 12,40 : left 12,520 : width 12,500 : height 12,600 : bar_both 12
button 21 : top 21,660 : left 21,300 : caption 21,"Encoder" : on_click 21,encoder
progress_bar 31 : hide 31 : top 31,690 : left 31,10 : width 31,500

end

encoder:
  nom$ = "ProgrammeEncode.exe"
  EncoderSource(nom$)
  return

sub EncoderSource()
'  dim_local res%, prg$
'  dll_on "KGF.dll"
'  prg$ = param_value$(0)
'  if file_exists(nom$)=1 then file_delete nom$
'  res% = dll_call3("CompilePanoramicToEXE",adr(prg$),handle(11),adr(nom$))
'  message "res%="+str$(res%)
'  dll_off
'  exit_sub

  dim_local  tin$, tout$, prg$, i%, k%, n%, n1%, cnt%, out$
  dim_local p%, s$, t$, c%, m%, vide%(64000)
  dim decoder%(255)

  data  0, 22, 21, 20, 19, 18, 17, 16, 31, 30,  0, 28, 27,  0, 25, 24
  data  7,  6,  5,  4,  3,  2,  1,  0, 15, 14, 13, 12, 11, 10,  9,  8
  data  55, 54, 53, 52, 51, 50, 49, 48, 63, 62, 61, 60, 59, 58, 57, 56
  data  39, 38, 37, 36, 35, 34, 33, 32, 47, 46, 45, 44, 43, 42, 41, 40
  data  87, 86, 85, 84, 83, 82, 81, 80, 95, 94, 93, 92, 91, 90, 89, 88
  data  71, 70, 69, 68, 67, 66, 65, 64, 79, 78, 77, 76, 75, 74, 73, 72
  data 119,118,117,116,115,114,113,112,127,126,125,124,123,122,121,120
  data 103,102,101,100, 99, 98, 97, 96,111,110,109,108,107,106,105,104
  data 151,150,149,148,147,146,145,144,159,158,157,156,155,154,153,152
  data 135,134,133,132,131,130,129,128,143,142,141,140,139,138,137,136
  data 183,182,181,180,179,178,177,176,191,190,189,188,187,186,185,184
  data 167,166,165,164,163,162,161,160,175,174,173,172,171,170,169,168
  data 215,214,213,212,211,210,209,208,223,222,221,220,219,218,217,216
  data 199,198,197,196,195,194,193,192,207,206,205,204,203,202,201,200
  data 247,246,245,244,243,242,241,240,255,254,253,252,251,250,249,248
  data 231,230,229,228,227,226,225,224,239,238,237,236,235,234,233,232

  for i% = 0 to 255
    read decoder%(i%)
  next i%


  prg$ = param_value$(0)
  filebin_open_read 2,prg$
  m% = filebin_size(2) - 8
  filebin_position 2,m%
  filebin_block_read 2,4,vide%(0)
  n% = 0
  for i%=3 to 0 step -1
    n% = n%*256 + vide%(i%)
  next i%
  m% = m% - n%
  filebin_position 2,0
 
  if file_exists(nom$)=1 then file_delete nom$
  filebin_open_write 1,nom$
  max 31,m%
  position 31,m%
  show 31
  while 64000<=m%
    filebin_block_read 2,64000,vide%(0)
    filebin_block_write 1,64000,vide%(0)
    m% = m% - 64000
    position 31,m%
  end_while
  if m%>0
    filebin_block_read 2,m%,vide%(0)
    filebin_block_write 1,m%,vide%(0)
  end_if
  filebin_close 2
  position 31,0
'  message "phase 1 ok"

  out$ = ""
  clear 12
  cnt% = 0
  if count(11)>0
    for i%=1 to count(11)
      s$ = item_read$(11,i%)
      t$ = ""
      if len(s$)>0
        for k%=1 to len(s$)
          n% = asc(mid$(s$,k%,1))
          t$ = t$ +chr$(decoder%(n%))
          vide%(k%-1) = decoder%(n%)
        next k%
      end_if
      item_add 12,t$
      cnt% = cnt% + len(t$) + 1
      n% = len(t$)
      vide%(n%) = 0
      filebin_block_write 1,n%+1,vide%(0)
    next i%
  end_if

  n% = cnt%
  for i%=0 to 3
    c% = bin_and(n%,255)
    n% = int(n%/256)
    vide%(i%) = c%
  next i%
  vide%(4) = 51
  vide%(5) = 66
  vide%(6) = 46
  vide%(7) = 70
  filebin_block_write 1,8,vide%(0)
  filebin_close 1
'  message "phase 2 ok"
  hide 31
end_sub


Dernière édition par Klaus le Ven 28 Oct 2016 - 1:48, édité 2 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Laurent (Minibug)

avatar

Nombre de messages : 2353
Age : 50
Localisation : Vienne (86)
Date d'inscription : 10/02/2012

MessageSujet: Re: Créer un EXE dans un programme Panoramic ?   Jeu 27 Oct 2016 - 20:55

Si l'on tente d'encoder ton code, une erreur apparaît a la fin du traitement en ligne 82 ! drunken Suspect affraid

J'aimerai bien voir la différence avec la DLL ! Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 7961
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: Re   Jeu 27 Oct 2016 - 22:10

Je suis intéressé mais condamné a répondre depuis une tablette.
J' ai un squatteur sur mon ordi... 
...vive les vacances scolaires .
Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Créer un EXE dans un programme Panoramic ?   Ven 28 Oct 2016 - 0:56

@Minibug:
Exact ! J'ai déterminé un peu rapidement la table d'encodage... Désolé. Cette fois, ça marche !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Créer un EXE dans un programme Panoramic ?   Ven 28 Oct 2016 - 1:51

Ce n'était toujours pas bon. J'ai refait la partie "table de conversion", et maintenant, on peut encoder le présent programme et exécuter le résultat qui est identique à ce que ferait l'EXE généré par l'éditeur de Panoramic.

Tel quel, toujours en 100 % Panoramic, le code est utilisable pour n'importe quel IDE écrit en Panoramic pour exécuter directement, sans avoir besoin d'une ligne de commande par Panoramic.exe. C'est un gros progrès.

Je suis en train de faire une fonction DLL pour faire la même chose, mais en beaucoup plus rapide.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Créer un EXE dans un programme Panoramic ?   Ven 28 Oct 2016 - 4:09

Voici la dernière version, utilisant la toute nouvelle fonction DLL pour faire le travail (télécharger KGF.dll avant d'utiliser !):
Code:
label encoder

dim nom$

full_space 0
alpha 1 : top 1,40  : left 1,10  : caption 1,"En clair:"
alpha 2 : top 2,40  : left 2,520  : caption 2,"Encodé:"
memo 11 : top 11,70 : left 11,10  : width 11,500 : height 11,600 : bar_both 11
memo 12 : top 12,70 : left 12,520 : width 12,500 : height 12,600 : bar_both 12
button 21 : top 21,690 : left 21,300 : caption 21,"Encoder" : on_click 21,encoder
progress_bar 31 : hide 31 : top 31,720 : left 31,10 : width 31,500
check 41 : top 41,10 : left 41,100 : width 41,400 : caption 41,"Exécuter avec KGF.dll"
  font_size 41,16 : font_bold 41 : font_color 41,255,0,0
 
end

encoder:
  nom$ = "ProgrammeEncode.exe"
  EncoderSource(nom$)
  return

sub EncoderSource()
  if checked(41)=1
    dim_local res%, prg$
    dll_on "KGF.dll"
    prg$ = param_value$(0)
    if file_exists(nom$)=1 then file_delete nom$
    res% = dll_call3("CompilePanoramicToEXE",adr(prg$),handle(11),adr(nom$))
    message "res%="+str$(res%)
    dll_off
    exit_sub
  end_if

  dim_local  tin$, tout$, prg$, i%, k%, n%, n1%, cnt%, out$
  dim_local p%, s$, t$, c%, m%, vide%(64000)
  dim decoder%(255)

  data  0, 22, 21, 20, 19, 18, 17, 16, 31, 30,  0, 28, 27,  0, 25, 24
  data  7,  6,  5,  4,  3,  2,  1,  0, 15, 14, 13, 12, 11, 10,  9,  8
  data  55, 54, 53, 52, 51, 50, 49, 48, 63, 62, 61, 60, 59, 58, 57, 56
  data  39, 38, 37, 36, 35, 34, 33, 32, 47, 46, 45, 44, 43, 42, 41, 40
  data  87, 86, 85, 84, 83, 82, 81, 80, 95, 94, 93, 92, 91, 90, 89, 88
  data  71, 70, 69, 68, 67, 66, 65, 64, 79, 78, 77, 76, 75, 74, 73, 72
  data 119,118,117,116,115,114,113,112,127,126,125,124,123,122,121,120
  data 103,102,101,100, 99, 98, 97, 96,111,110,109,108,107,106,105,104
  data 151,150,149,148,147,146,145,144,159,158,157,156,155,154,153,152
  data 135,134,133,132,131,130,129,128,143,142,141,140,139,138,137,136
  data 183,182,181,180,179,178,177,176,191,190,189,188,187,186,185,184
  data 167,166,165,164,163,162,161,160,175,174,173,172,171,170,169,168
  data 215,214,213,212,211,210,209,208,223,222,221,220,219,218,217,216
  data 199,198,197,196,195,194,193,192,207,206,205,204,203,202,201,200
  data 247,246,245,244,243,242,241,240,255,254,253,252,251,250,249,248
  data 231,230,229,228,227,226,225,224,239,238,237,236,235,234,233,232

  for i% = 0 to 255
    read decoder%(i%)
  next i%


  prg$ = param_value$(0)
  filebin_open_read 2,prg$
  m% = filebin_size(2) - 8
  filebin_position 2,m%
  filebin_block_read 2,4,vide%(0)
  n% = 0
  for i%=3 to 0 step -1
    n% = n%*256 + vide%(i%)
  next i%
  m% = m% - n%
  filebin_position 2,0
 
  if file_exists(nom$)=1 then file_delete nom$
  filebin_open_write 1,nom$
  max 31,m%
  position 31,m%
  show 31
  while 64000<=m%
    filebin_block_read 2,64000,vide%(0)
    filebin_block_write 1,64000,vide%(0)
    m% = m% - 64000
    position 31,m%
  end_while
  if m%>0
    filebin_block_read 2,m%,vide%(0)
    filebin_block_write 1,m%,vide%(0)
  end_if
  filebin_close 2
  position 31,0
'  message "phase 1 ok"

  out$ = ""
  clear 12
  cnt% = 0
  if count(11)>0
    for i%=1 to count(11)
      s$ = item_read$(11,i%)
      t$ = ""
      if len(s$)>0
        for k%=1 to len(s$)
          n% = asc(mid$(s$,k%,1))
          t$ = t$ +chr$(decoder%(n%))
          vide%(k%-1) = decoder%(n%)
        next k%
      end_if
      item_add 12,t$
      cnt% = cnt% + len(t$) + 1
      n% = len(t$)
      vide%(n%) = 0
      filebin_block_write 1,n%+1,vide%(0)
    next i%
  end_if

  n% = cnt%
  for i%=0 to 3
    c% = bin_and(n%,255)
    n% = int(n%/256)
    vide%(i%) = c%
  next i%
  vide%(4) = 51
  vide%(5) = 66
  vide%(6) = 46
  vide%(7) = 70
  filebin_block_write 1,8,vide%(0)
  filebin_close 1
'  message "phase 2 ok"
  hide 31
end_sub
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Laurent (Minibug)

avatar

Nombre de messages : 2353
Age : 50
Localisation : Vienne (86)
Date d'inscription : 10/02/2012

MessageSujet: Re: Créer un EXE dans un programme Panoramic ?   Ven 28 Oct 2016 - 9:26

Merci Klaus, ça c'est vraiment une super idée !

Du coup je vais pouvoir rajouter la conversion en EXE à GPP.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Créer un EXE dans un programme Panoramic ?   Ven 28 Oct 2016 - 10:54

Oui, c'était un peu l'idée... Moi aussi, je vais m'en servir pour l'ajouter à Synedit_Editor.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7961
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Ven 28 Oct 2016 - 12:01

cheers Bravo Klaus !
Encore une ouverture pour panoramic.

J' ai une idée derrière la tête et dès qu' elle passe devant je la mettrai sur le forum...
Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
pascal10000

avatar

Nombre de messages : 517
Localisation : Troyes
Date d'inscription : 05/02/2011

MessageSujet: Re: Créer un EXE dans un programme Panoramic ?   Ven 28 Oct 2016 - 13:56

bjr a tous
Je n'ai pas très bien compris ton programme
Peut tu donner plus d'explication et comment s'en servir
merci cordialement
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Créer un EXE dans un programme Panoramic ?   Ven 28 Oct 2016 - 14:05

Mon programme est simplement une démonstration de la nouvelle fonction DLL: CompilePanoramicToEXE.

Cette fonction permet de prendre un source Panoramic quelconque, contenu dans un mémo Panoramic, et de générer le fichier EXE correspondant, directement sans passer par l'éditeur de Panoramic. Jusqu'à maintenant, il était impossible d'exécuter du code Panoramic généré par un programme Panoramic, directement, sans passer, soit par l'éditeur, soir par Panoramic.exe.

Cette restriction est maintenant levée et on peut avoir des programmes Panoramic qui génèrent un source Panoramic et l'exécutent directement. Cela est surtout pensé pour des logiciels du genre IDE, comme Synedit_Editor ou GPP, mais cela peut servir plus largement à des programmes qui veulent faire du "scripting", donc la génération et l'exécution de code, dynamiquement.

Mon programme de démo fonctionne comme ceci:
- au lancement, un écran s'affiche, avec les champs suivants:
1 check_box pour choisir l'utilisation de la DLL si cochée (très rapide, utilise KGF.dll), ou un code en 100 % Panoramic parfaitement fonctionnel (lent, entre 30 et 50 secondes chaque fois)
1 mémo à gauche dans lequel on colle ou on saisit le code à exécuter
1 mémo à droite qui sera rempli par le code source encodé pour Panoramic (juste pour contrôle, sans utilité fonctionnelle)
1 bouton de lancement

Donc, le fonctionnement est simple: coller le code dans le mémo de gauche, choisir de cocher la check_box ou pas, puis cliquer sur le bouton de lancement.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
pascal10000

avatar

Nombre de messages : 517
Localisation : Troyes
Date d'inscription : 05/02/2011

MessageSujet: Re: Créer un EXE dans un programme Panoramic ?   Ven 28 Oct 2016 - 15:41

ok klaus j'ai compris son system
dommage que l'EX ne soit pas compilé!
merci
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
silverman

avatar

Nombre de messages : 464
Age : 45
Localisation : Picardie
Date d'inscription : 19/03/2015

MessageSujet: Re: Créer un EXE dans un programme Panoramic ?   Ven 28 Oct 2016 - 17:00

@klaus
Si ça peux te servir, il est possible de générer la table d'encodage, c'est une fonction XOR. Une demo qui compare la table lu et celle généré:
Code:
full_space 0
font_name 0,"dejavu sans mono"
dim i%,k%,c$

   data  0, 22, 21, 20, 19, 18, 17, 16, 31, 30,  0, 28, 27,  0, 25, 24
   data  7,  6,  5,  4,  3,  2,  1,  0, 15, 14, 13, 12, 11, 10,  9,  8
   data  55, 54, 53, 52, 51, 50, 49, 48, 63, 62, 61, 60, 59, 58, 57, 56
   data  39, 38, 37, 36, 35, 34, 33, 32, 47, 46, 45, 44, 43, 42, 41, 40
   data  87, 86, 85, 84, 83, 82, 81, 80, 95, 94, 93, 92, 91, 90, 89, 88
   data  71, 70, 69, 68, 67, 66, 65, 64, 79, 78, 77, 76, 75, 74, 73, 72
   data 119,118,117,116,115,114,113,112,127,126,125,124,123,122,121,120
   data 103,102,101,100, 99, 98, 97, 96,111,110,109,108,107,106,105,104
   data 151,150,149,148,147,146,145,144,159,158,157,156,155,154,153,152
   data 135,134,133,132,131,130,129,128,143,142,141,140,139,138,137,136
   data 183,182,181,180,179,178,177,176,191,190,189,188,187,186,185,184
   data 167,166,165,164,163,162,161,160,175,174,173,172,171,170,169,168
   data 215,214,213,212,211,210,209,208,223,222,221,220,219,218,217,216
   data 199,198,197,196,195,194,193,192,207,206,205,204,203,202,201,200
   data 247,246,245,244,243,242,241,240,255,254,253,252,251,250,249,248
   data 231,230,229,228,227,226,225,224,239,238,237,236,235,234,233,232

' lecture de la table de codage
print "LECTURE DES DATAS:"
 for i%=0 to 255
    ' lire
    read k%
    '
    ' affichage
    c$=str$(k%)
    if k%<10 then c$="00"+str$(k%)
    if k%>9 and k%<100 then c$="0"+str$(k%)
    '
    print c$;"   ";
    if mod(i%+1,16)=0 then print
 next i%

print : print

' générer la table de codage
print "CODAGE NUMERIQUE:"
 for i%=0 to 255
    ' encoder
    k%=bin_xor(i%,23)
    if i%=0 or i%=10 or i%=13 then k%=0
    '
    ' affichage
    c$=str$(k%)
    if k%<10 then c$="00"+str$(k%)
    if k%>9 and k%<100 then c$="0"+str$(k%)
    '
    print c$;"   ";
    if mod(i%+1,16)=0 then print
 next i%
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Créer un EXE dans un programme Panoramic ?   Ven 28 Oct 2016 - 17:10

Merci, Silverman ! C'est intéressant, et je vais intégrer cela au lieu de la longue liste des DATA.

EDIT

Bravo ! Ca marche. Je vais l'intégrer dans la version Panoramic et dans la version DLL.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Créer un EXE dans un programme Panoramic ?   Ven 28 Oct 2016 - 17:39

C'est intégré et ça marche en Panoramic pur et en DLL. J'ai donc mis à jour également Synedit_Editor et KGF.dll, ainsi que le programme de démo que voici:
Code:
label encoder

dim nom$

full_space 0
alpha 1 : top 1,40  : left 1,10  : caption 1,"En clair:"
alpha 2 : top 2,40  : left 2,520  : caption 2,"Encodé:"
memo 11 : top 11,70 : left 11,10  : width 11,500 : height 11,600 : bar_both 11
memo 12 : top 12,70 : left 12,520 : width 12,500 : height 12,600 : bar_both 12
button 21 : top 21,690 : left 21,300 : caption 21,"Encoder" : on_click 21,encoder
progress_bar 31 : hide 31 : top 31,720 : left 31,10 : width 31,500
check 41 : top 41,10 : left 41,100 : width 41,400 : caption 41,"Exécuter avec KGF.dll"
  font_size 41,16 : font_bold 41 : font_color 41,255,0,0
 
end

encoder:
  nom$ = "ProgrammeEncode.exe"
  EncoderSource(nom$)
  return

sub EncoderSource()
  if checked(41)=1
    dim_local res%, prg$
    dll_on "KGF.dll"
    prg$ = param_value$(0)
    if file_exists(nom$)=1 then file_delete nom$
    res% = dll_call3("CompilePanoramicToEXE",adr(prg$),handle(11),adr(nom$))
    message "res%="+str$(res%)
    dll_off
    exit_sub
  end_if

  dim_local  tin$, tout$, prg$, i%, k%, n%, n1%, cnt%, out$
  dim_local p%, s$, t$, c%, m%, vide%(64000)
  dim decoder%(255)

'  data  0, 22, 21, 20, 19, 18, 17, 16, 31, 30,  0, 28, 27,  0, 25, 24
'  data  7,  6,  5,  4,  3,  2,  1,  0, 15, 14, 13, 12, 11, 10,  9,  8
'  data  55, 54, 53, 52, 51, 50, 49, 48, 63, 62, 61, 60, 59, 58, 57, 56
'  data  39, 38, 37, 36, 35, 34, 33, 32, 47, 46, 45, 44, 43, 42, 41, 40
'  data  87, 86, 85, 84, 83, 82, 81, 80, 95, 94, 93, 92, 91, 90, 89, 88
'  data  71, 70, 69, 68, 67, 66, 65, 64, 79, 78, 77, 76, 75, 74, 73, 72
'  data 119,118,117,116,115,114,113,112,127,126,125,124,123,122,121,120
'  data 103,102,101,100, 99, 98, 97, 96,111,110,109,108,107,106,105,104
'  data 151,150,149,148,147,146,145,144,159,158,157,156,155,154,153,152
'  data 135,134,133,132,131,130,129,128,143,142,141,140,139,138,137,136
'  data 183,182,181,180,179,178,177,176,191,190,189,188,187,186,185,184
'  data 167,166,165,164,163,162,161,160,175,174,173,172,171,170,169,168
'  data 215,214,213,212,211,210,209,208,223,222,221,220,219,218,217,216
'  data 199,198,197,196,195,194,193,192,207,206,205,204,203,202,201,200
'  data 247,246,245,244,243,242,241,240,255,254,253,252,251,250,249,248
'  data 231,230,229,228,227,226,225,224,239,238,237,236,235,234,233,232

'  for i% = 0 to 255
'    read decoder%(i%)
'  next i%

  for i%=0 to 255
    k%=bin_xor(i%,23)
    if i%=0 or i%=10 or i%=13 then k%=0
    decoder%(i%) = k%
  next i%

  prg$ = param_value$(0)
  filebin_open_read 2,prg$
  m% = filebin_size(2) - 8
  filebin_position 2,m%
  filebin_block_read 2,4,vide%(0)
  n% = 0
  for i%=3 to 0 step -1
    n% = n%*256 + vide%(i%)
  next i%
  m% = m% - n%
  filebin_position 2,0
 
  if file_exists(nom$)=1 then file_delete nom$
  filebin_open_write 1,nom$
  max 31,m%
  position 31,m%
  show 31
  while 64000<=m%
    filebin_block_read 2,64000,vide%(0)
    filebin_block_write 1,64000,vide%(0)
    m% = m% - 64000
    position 31,m%
  end_while
  if m%>0
    filebin_block_read 2,m%,vide%(0)
    filebin_block_write 1,m%,vide%(0)
  end_if
  filebin_close 2
  position 31,0
'  message "phase 1 ok"

  out$ = ""
  clear 12
  cnt% = 0
  if count(11)>0
    for i%=1 to count(11)
      s$ = item_read$(11,i%)
      t$ = ""
      if len(s$)>0
        for k%=1 to len(s$)
          n% = asc(mid$(s$,k%,1))
          t$ = t$ +chr$(decoder%(n%))
          vide%(k%-1) = decoder%(n%)
        next k%
      end_if
      item_add 12,t$
      cnt% = cnt% + len(t$) + 1
      n% = len(t$)
      vide%(n%) = 0
      filebin_block_write 1,n%+1,vide%(0)
    next i%
  end_if

  n% = cnt%
  for i%=0 to 3
    c% = bin_and(n%,255)
    n% = int(n%/256)
    vide%(i%) = c%
  next i%
  vide%(4) = 51
  vide%(5) = 66
  vide%(6) = 46
  vide%(7) = 70
  filebin_block_write 1,8,vide%(0)
  filebin_close 1
'  message "phase 2 ok"
  hide 31
end_sub
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
silverman

avatar

Nombre de messages : 464
Age : 45
Localisation : Picardie
Date d'inscription : 19/03/2015

MessageSujet: Re: Créer un EXE dans un programme Panoramic ?   Ven 28 Oct 2016 - 19:07

J'ai une question bête, pourquoi ne pas utiliser 'file_copy' pour recopier l'exe du ...\temp, à la place des 'file_bin'?
En tout cas, c'est une belle trouvaille!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Créer un EXE dans un programme Panoramic ?   Ven 28 Oct 2016 - 19:54

Parce que, justement, ce n'est pas le fichier entier qu'il faut copier.

Il faut juste copier le début du fichier. Le nombre d'octets à copier est égal à (la taille du fichier) -8 -(taille du code source Panoramic) du programme à l'origine du EXE servant d'origine. Et la taille de ce code se trouve dans les octets (taille du fichier)-8 et les 3 octets suivants.

Il font donc recopier le début du fichier EXE, puis installer le nouveau code source, puis copier derrière le nombre d'octets du nouveau code source, sous forme d'un entier de 4 octets, et finalement les 4 derniers octets qui sont une constante.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Laurent (Minibug)

avatar

Nombre de messages : 2353
Age : 50
Localisation : Vienne (86)
Date d'inscription : 10/02/2012

MessageSujet: Re: Créer un EXE dans un programme Panoramic ?   Ven 28 Oct 2016 - 21:30

Klaus,

Pourquoi n'as tu pas préféré partir du choix du nom du programme pour la création de l’exécutable directement ?
Est ce que c'est juste pour simplifié ton code ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Créer un EXE dans un programme Panoramic ?   Ven 28 Oct 2016 - 21:55

Mon petit programme est juste une petite, maigre démo, montrant comment appeler la fonction DLL et, pour la partie Panoramic pure, montrer la technique pour le faire. Il n'a pas la prétention d'être un vrai outil - il y a Panoramic_Editor pour cela qui fait ça très bien.

Rien n'empêche, dans mon petit code, d'ajouter un petit dialogue ou une fenêtre de sélection pour choisir le nom qui, pour le moment, est codé dans une variable
Code:
  nom$ = "ProgrammeEncode.exe"
L'important, ce sont les points suivants:
1. il faut un "modèle", une source pour le noyau de Panoramic, pour l'interpréteur. Et tout naturellement, j'ai choisi de le copier à partir du programme en cours, et son fichier EXE est déterminé par
Code:
    prg$ = param_value$(0)
2. le code Panoramic à utiliser est pris dans un mémo qui, dans un programme réel, sera certainement caché par HIDE. Ici, il est visible juste pour la démo.
3. le nom du fichier EXE résultant est dans la variable nom$ qu'on peut charger de multiples façons - chacun le fera à son goût. Dans Synedit_Editor, j'ai utilisé tout naturellement le nom du fichier BAS mémorisé, en remplaçant l'extension par EXE.
4. en utilisant la fonction DLL, ce sont ces 3 éléments qui sont passés en paramètre. La fonction est donc entièrement paramétrée et rien n'est imposée par elle. Ca va même plus loin: la fonction DLL refuse de faire le travail si un des paramètres est invalide, le fichier source inexistant ou le fichier EXE déjà existant - il est de la responsabilité du programme appelant de construire l'environnement correct.

J'ai intégré cette fonction dans Synedit_Editor avec une grande facilité:
Code:
  memo 92 : hide 92 : bar_both 92 : ' mémo pour recevoir le source à compiler en EXE
...
' ici, en cas de frappe F8 ou F9, si la cible de l'outil est $ (dollar):
    file_load 92,f$                                  : ' charger le source dans le mémo interne
    fexe$ = left$(f$,len(f$)-3) + ".exe"            : ' nom du fichier EXE à générer
    if file_exists(fexe$)=1 then file_delete fexe$  : ' supprimer un EXE déjà existant
    f$ = param_value$(0)                            : ' prendre le chemin de Synedit_Editor (programme actif)
    res% = dll_call3("CompilePanoramicToEXE",adr(f$),handle(92),adr(fexe$)) : ' générer le fichier EXE
    if res%<0
      message "Erreur "+str$(res%)+" en génération du fichier EXE"
      return
    end_if
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Laurent (Minibug)

avatar

Nombre de messages : 2353
Age : 50
Localisation : Vienne (86)
Date d'inscription : 10/02/2012

MessageSujet: Re: Créer un EXE dans un programme Panoramic ?   Ven 28 Oct 2016 - 22:40

Ok là c'est plus clair ! Merci pour ta réponse Klaus Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Créer un EXE dans un programme Panoramic ?   Ven 28 Oct 2016 - 23:08

Et tu verras, si tu fais l'essai: la version avec la fonction DLL est ultra-rapide ! C'est quasiment instantané. C'est un vrai plaisir de générer un EXE "on the fly", comme diraient des Ricains.

Evidemment, tout cela est tributaire du codage de Jack. Cela reste valable tant que Jack ne change pas le principe de codage ni la façon de mémoriser le code dans l'EXE généré par Panoramic_Editor. J'espère que Jack ne prendra pas ombrage de l'initiative que j'ai prise en réalisant cette fonction - elle satisfait une demande qui a été faite depuis longtemps, sur le forum.

Maintenant, il est évident que cela ne s'applique qu'aux programmes lancés par Panoramic_Editor ou générés par lui. Cela ne s'applique pas aux programmes compilés par le compilateur sur lequel Jack travaille, mais ça, c'est une autre histoire.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Laurent (Minibug)

avatar

Nombre de messages : 2353
Age : 50
Localisation : Vienne (86)
Date d'inscription : 10/02/2012

MessageSujet: Re: Créer un EXE dans un programme Panoramic ?   Sam 29 Oct 2016 - 12:48

Bonjour klaus et bonjour à tous !

Du coup, voila ma modeste contribution pour ceux qui ne veulent que le nécessaire.
C'est vrai que ça parait tellement simple comme ça !
Encore merci pour ton travail Klaus. c'est une pure merveille...
Laughing  Laughing  Laughing

Code:
LABEL choix , sortie
DIM nom$, exe$ , res%, prg$

CAPTION 0,"CONVERTISSEUR DE FICHIER EXE" : BORDER_HIDE 0 : COLOR 0,0,0,0
LEFT 0,(SCREEN_X-320)/2 : TOP 0,(SCREEN_Y-70)/2 : WIDTH 0,320 : HEIGHT 0,70
ALPHA 1 : LEFT 1,10 : TOP 1,7  : FONT_SIZE 1,12 : CAPTION 1,CAPTION$(0) : FONT_BOLD 1 : COLOR 1,0,0,0 : FONT_COLOR 1,200,200,0
BUTTON 2 : LEFT 2,11 : TOP 2,32 : FONT_SIZE 2,10 : WIDTH 2,240 : HEIGHT 2,28 : CAPTION 2,"Choisir le fichier BAS à convertir" : ON_CLICK 2,choix
HINT 2,"Permet la conversion d'un fichier Panoramic"+CHR$(13)+"de type BAS en fichier EXE autonome."
BUTTON 3 : LEFT 3,255 : TOP 3,32 : FONT_SIZE 3,10 : WIDTH 3,57 : HEIGHT 3,28 : CAPTION 3,"Sortie" : ON_CLICK 3,sortie
HINT 3,"Permet la sortie du programme"+CHR$(13)+"sans aucune modification."
ALPHA 5 : HIDE 5 : LEFT 5,10 : TOP 5,35  : FONT_SIZE 5,10 : COLOR 5,0,0,0 : FONT_COLOR 5,220,220,220
OPEN_DIALOG 4 : FILTER 4,"fichiers Panoramic Basic|*.bas" : MEMO 6 : LEFT 6,400 : TOP 6,300 : HIDE 6
END

choix:
  SHOW 5 : CAPTION 5,"Vérification en cours ..." : HIDE 2 : HIDE 3 : nom$=FILE_NAME$(4)
  IF FILE_EXISTS(nom$)=0 THEN CAPTION 5,"Fichier introuvable !  Patientez..." : PAUSE 2000 : HIDE 5 : SHOW 2 : SHOW 3 : RETURN
  IF RIGHT$(LOWER$(nom$),3)<>"bas" THEN CAPTION 5,"Fichier invalide !  Patientez..." : PAUSE 2000 : HIDE 5 : SHOW 2 : SHOW 3 : RETURN
  exe$=LEFT$(nom$,LEN(nom$)-3)+"EXE"
  FILE_LOAD 6,nom$ : IF FILE_EXISTS(exe$)=1 THEN FILE_DELETE exe$
  CAPTION 5,"Conversion du fichier en cours ..."
  DLL_ON "D:\BASIC\DLLs\KGF.dll" : prg$ = PARAM_VALUE$(0)
  res% = dll_call3("CompilePanoramicToEXE",adr(prg$),handle(6),adr(exe$))
  CAPTION 5,"Conversion terminée !  Fermeture du programme..." : PAUSE 2000
TERMINATE

sortie:
TERMINATE

Et voila le résultat :



Dernière édition par Minibug le Sam 29 Oct 2016 - 18:56, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 7961
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Sam 29 Oct 2016 - 15:09

@Minibug,

tu pouvais aussi reprendre le "recover source" et avoir les deux sens de conversion...

Embarassed , c'est bon..., je sors...
lol!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Laurent (Minibug)

avatar

Nombre de messages : 2353
Age : 50
Localisation : Vienne (86)
Date d'inscription : 10/02/2012

MessageSujet: Re: Créer un EXE dans un programme Panoramic ?   Sam 29 Oct 2016 - 15:27

oui par le bouton a droite...
lol! lol! lol!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Laurent (Minibug)

avatar

Nombre de messages : 2353
Age : 50
Localisation : Vienne (86)
Date d'inscription : 10/02/2012

MessageSujet: Re: Créer un EXE dans un programme Panoramic ?   Sam 29 Oct 2016 - 16:55

J'ai apporté quelques modifications au code.
Mise à jour faite au dessus
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Créer un EXE dans un programme Panoramic ?   

Revenir en haut Aller en bas
 
Créer un EXE dans un programme Panoramic ?
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant
 Sujets similaires
-
» Intégrer une page HTML dans son programme ?
» Structure pour un programme Windows 1/4
» Ajout d'un nouveau type d'objet dans une form Panoramic !
» Générateur / editeur de donjon (les débuts)
» quel sont les fichiers qui ne servent a rien

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: