Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Mise en forme de sources Panoramic (bis) | |
| | Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Mise en forme de sources Panoramic (bis) Dim 12 Juin 2011 - 22:45 | |
| A la demande générale de Jicehel, mon petit programme de mise en forme de sources (déjà ébauché autrefois mais je crois jamais publié dans sa forme finale, vu l'enthousiasme que ça avait déclenché). Fonctions (au choix): - mise en majuscules des mots-clés Panoramic, ou seulement la première lettre. - ajout des indentations sur les if/else/end_if, repeat/until, for/next, select/end_select Comme toujours, les chemins de fichiers (en tête du programme) sont à ajuster en fonction des conditions locales. - Code:
-
' MefPano.bas Mise en majuscules des mots-clés d'un source Panoramic ' et ajout des indentations. LABEL Exec, Clmcm, Clpcm, Clide, Afres LABEL Fin, Reb, Igno, Nana, Instri, Mcl, record, naa, Ajide, Fmef LABEL Trace, MajMin DIM Mcm, Pcm, Ide, piden DIM f$, fc$, fo$, fr$, fmc$, fa$, fb$, a$, c$, n$, s$, sm$, ch$, pr$, p$ DIM ntl, ncl, j, ls, k, k1, k2, kk, u, uu, um, trv, nbl, st DIM indent, ip, b$, mc$, ns, tr, nf1, nf2
DATA "IF ","FOR ","SELECT ","WHILE ","REPEAT" DATA "ELSE","END_IF","NEXT ","END_SELECT","END_WHILE","UNTIL " DIM mcl$(500), mcpl$(10), mcmn$(10) FOR j = 1 TO 5: READ mcpl$(j): NEXT j FOR j = 1 TO 6: READ mcmn$(j): NEXT j
fc$ = "C:\Langages\Panoramic\MclePano.txt": ' fichier des mots-clé Panoramic fo$ = "C:\Temp\Tmp.bas": ' fichier résultat, mots-clés en majuscules fr$ = "C:\TEMP\RESULT.bas": ' fichier résultat, avec indentations fmc$ = "C:\Temp\mcl.txt": ' fichier copié/collé depuis le 'Manuel de Référence'
WIDTH 0, 500: HEIGHT 0, 240 PRINT_TARGET_IS 0 IF FILE_EXISTS(fc$) = 0 IF FILE_EXISTS(fmc$) = 0 PRINT "Copier/Coller la liste complète telle-quelle des mots_clés du PRINT " Manuel de Référence sur le site Panoramic (Page Principale)" PRINT " dans " + fmc$ + ", puis relancer." STOP GOTO Fin END_IF GOSUB Mcl: ' création du fichier des mots-clé END_IF ncl = 0: REM 372 mots-clé (12/09) FILE_OPEN_READ 1,fc$ WHILE FILE_EOF(1) = 0 ncl = ncl + 1: FILE_READLN 1, mcl$(ncl) END_WHILE FILE_CLOSE 1
' Acquisition du fichier à mettre en forme PRINT:PRINT " SÉLECTIONNER LE FICHIER A METTRE EN FORME" c$ = DIR_CURRENT$: ' sauvegarde répertoire courant DIR_CHANGE "C:\LANGAGES\Panoramic\" OPEN_DIALOG 1 FILTER 1, "Sources .bas|*.bas" f$ = FILE_NAME$(1) DIR_CHANGE c$: IF f$ = "_" THEN GOTO Fin FILE_OPEN_READ 1, f$: ntl = 0 WHILE FILE_EOF(1) = 0: FILE_READLN 1, a$: ntl = ntl + 1: END_WHILE FILE_CLOSE 1 DELETE 1
CLS ALPHA 1: LEFT 1, 20: TOP 1, 10: WIDTH 1, 600 FONT_SIZE 1, 14: FONT_BOLD 1: FONT_UNDERLINE 1: FONT_COLOR 1,0,0,255 CAPTION 1, "*** Mise en forme de fichiers sources .bas ***" ALPHA 2: LEFT 2, 20: TOP 2, 40: WIDTH 2, 60 FONT_SIZE 2, 12 CAPTION 2, "Fichier:" ALPHA 3: LEFT 3, 80: TOP 3, 40: WIDTH 3, 400 FONT_SIZE 3, 12: FONT_COLOR 3,255,0,0 CAPTION 3, f$ CHECK 4: LEFT 4, 20: TOP 4, 80: WIDTH 4, 300 CAPTION 4, "Mots-clés en majuscules" ON_CLICK 4, Clmcm CHECK 5: LEFT 5, 20: TOP 5, 100: WIDTH 5, 300 CAPTION 5, "1ère lettre mots-clés en majuscule" ON_CLICK 5, Clpcm CHECK 6: LEFT 6, 20: TOP 6, 120: WIDTH 6, 300 CAPTION 6, "Indentation" ON_CLICK 6, Clide Spin 7: LEFT 7, 100: TOP 7, 120: WIDTH 7, 30 MIN 7, 0: MAX 7, 10: POSITION 7, 4 BUTTON 10: LEFT 10, 20: TOP 10, 150: WIDTH 10, 150 CAPTION 10, "Exécuter" ON_CLICK 10, Exec BUTTON 11: LEFT 11, 300: TOP 11, 150: WIDTH 11, 150 CAPTION 11, "Quitter" ON_CLICK 11, Fin ALPHA 8: LEFT 8, 50: TOP 8, 180: WIDTH 8, 150 Mcm = 0: Pcm = 0: Ide = 0 END
Fin: TERMINATE
Clmcm: Mcm = CHECKED(4): IF Mcm = 1 THEN Pcm = 0 RETURN
Clpcm: Pcm = CHECKED(5): IF Pcm = 1 THEN Mcm = 0 RETURN
Clide: Ide = CHECKED(6) RETURN
Afres: EXECUTE "Notepad.exe " + fr$ RETURN
Trace: Message "Erreur !, abandon" GOTO Fin RETURN
Exec: piden = POSITION(7) IF Mcm = 0 AND Pcm = 0 AND Ide = 0 THEN RETURN IF Mcm = 0 AND Pcm = 0 THEN fa$ = f$: GOTO Ajide IF Ide = 0 fa$ = fr$ ELSE fa$ = fo$ END_IF ON_ERROR_GOTO Trace ' Mise en majuscules des mots-clés de Panoramic nf1 = 21: nf2 = 22 FILE_OPEN_READ nf1, f$: nbl = 0 FILE_OPEN_WRITE nf2, fa$ WHILE FILE_EOF(nf1) = 0 FILE_READLN nf1, a$: nbl = nbl + 1 CAPTION 8, "Ligne: "+ STR$(nbl)+" / "+STR$(ntl) p$ = UPPER$(LTRIM$(a$)) IF p$ = "" OR LEFT$(a$, 1) = "'" OR LEFT$(p$, 3) = "REM" THEN GOTO Igno um = LEN(a$): ch$ = a$: k1 = 0: ' um = limite de recherche k = INSTR(UPPER$(ch$), "REM"): IF k > 0 THEN um = k + 3: ' commentaire k = INSTR(ch$, "'"): IF k > 0 THEN um = k + 3: ' commentaire s$ = CHR$(34): k = INSTR(ch$, s$): k1 = k: ' pour ignorer les mots entre quotes IF k1 > 0 u = k1 + 1: GOSUB Instri: k2 = k ELSE k1 = LEN(a$): k2 = 0 END_IF ' Recherche de tous les mots-clés de la table dans a$ FOR j = 1 TO ncl s$ = mcl$(j): ls = LEN(s$): sm$ = s$ u = 1 Reb: ch$ = UPPER$(a$): GOSUB Instri IF k > 0 AND k < um IF k < k1 OR k > k2 IF LEN(a$) >= (k + ls) c$ = MID$(a$, k + ls, 1) IF c$<>" " AND c$<>"(" AND c$<>":" GOTO naa END_IF END_IF IF Pcm = 1 ' GOSUB MajMin: ' conversion majuscule+minuscules sm$ = LEFT$(sm$, 1) + LOWER$(MID$(sm$, 2, ls-1)) END_IF IF k > 1 IF k = LEN(a$) - ls + 1 a$ = LEFT$(a$, k-1) + sm$ ELSE a$ = LEFT$(a$, k-1) + sm$ + RIGHT$(a$, LEN(a$)-k-ls+1) END_IF ELSE IF LEN(a$) > ls a$ = sm$ + RIGHT$(a$, LEN(a$)-ls) ELSE a$ = sm$ END_IF END_IF IF s$ = "COLOR" then stop naa: u = k + ls: GOTO Reb: 'trouvé, recherche si occurence suivante END_IF END_IF NEXT j Igno: FILE_WRITELN nf2, a$ END_WHILE FILE_CLOSE nf1 FILE_CLOSE nf2 IF Ide = 0 THEN GOTO Fmef
Ajide: ' Ajout des indentations FILE_OPEN_READ nf1, fa$: nbl = 0 FILE_OPEN_WRITE nf2, fr$ indent = 0 WHILE FILE_EOF(nf1) = 0 FILE_READLN nf1, a$: nbl = nbl + 1 CAPTION 8, "Ligne: " + STR$(nbl)+" / "+STR$(ntl) a$ = TRIM$(a$): ip = 0: tr = 0 IF a$ = "" THEN GOTO Nana FOR j = 1 TO 5 mc$ = mcpl$(j) IF LEN(a$) >= LEN(mc$) b$ = LEFT$(UPPER$(a$), LEN(mc$)) IF b$ = mc$ IF b$ = "IF " ch$ = "THEN " IF INSTR(UPPER$(a$), ch$) > 0 THEN tr = 1: EXIT_FOR ELSE IF b$ = "FOR " ch$ = "NEXT " IF INSTR(UPPER$(a$), ch$) >0 THEN tr = 1: EXIT_FOR ELSE IF b$ = "WHILE " ch$ = "END_WHILE" IF INSTR(UPPER$(a$), ch$) >0 THEN tr = 1: EXIT_FOR ELSE IF b$ = "REPEAT" ch$ = "UNTIL " IF INSTR(UPPER$(a$), ch$) >0 THEN tr = 1: EXIT_FOR END_IF END_IF END_IF END_IF ip = piden: tr = 1: EXIT_FOR END_IF END_IF NEXT j IF tr = 0 FOR j = 1 TO 6 mc$ = mcmn$(j) IF LEN(a$) >= LEN(mc$) b$ = LEFT$(UPPER$(a$), LEN(mc$)) IF b$ = mc$ indent = indent - piden: tr = 1: EXIT_FOR END_IF END_IF NEXT j END_IF IF b$ = "ELSE" THEN ip = piden ns = indent IF tr = 0 AND INSTR(a$, ":") > 0 AND INSTR(a$, " ") < 1 ns = 0: ' c'est une étiquette END_IF IF ns > 0 THEN a$ = STRING$(ns, " ") + a$ Nana: FILE_WRITELN nf2, a$ indent = indent + ip END_WHILE FILE_CLOSE nf1 FILE_CLOSE nf2 IF fa$ = fo$ THEN FILE_DELETE fo$ Fmef: CAPTION 8, "" CAPTION 10, "Voir le résultat" ON_CLICK 10, Afres MESSAGE "Résultat dans:" + CHR$(13) + CHR$(10) + fr$ RETURN
MajMin: sm$ = LEFT$(sm$, 1) + LOWER$(MID$(sm$, 2, ls-1)) kk = INSTR(sm$, "_") IF kk > 0 sm$ = LEFT$(sm$, kk) + UPPER$(MID$(sm$, kk+1, 1)) + MID$(sm$, kk+2, ls-kk-1) uu = kk+1 p$ = RIGHT$(sm$, ls-uu+1): kk = INSTR(p$, "_") IF kk > 0 kk = kk + uu - 1 sm$ = LEFT$(sm$, kk) + UPPER$(MID$(sm$, kk+1, 1)) + MID$(sm$, kk+2, ls-kk-1) END_IF END_IF RETURN
Instri: ' recherche de la séquence s$ dans ch$, à partir de la position u ' position rendue dans k (ou 0: non trouvé) p$ = RIGHT$(ch$, LEN(ch$) - u + 1) k = INSTR(p$, s$) IF k > 0 THEN k = k + u - 1 RETURN
Mcl: ' Mise en forme du fichier des mots-clé de Panoramic, récupéré par ' copier/coller du Manuel de Référence dans C:\Temp\\mcl.txt, mis en forme ' dans C:\Langages\Panoramic\MclePano.txt FILE_OPEN_READ 1, fmc$ FILE_OPEN_WRITE 2, fc$ pr$ = "" WHILE FILE_EOF(1) = 0: FILE_READLN 1, a$ a$ = TRIM$(a$) IF LEN(a$) > 1 IF LEFT$(a$, 9) = "IF C ELSE" THEN a$ = "ELSE": GOTO record IF LEFT$(a$, 9) = "(FOR V=S " THEN a$ = "STEP": GOTO record IF LEFT$(a$, 9) = "(FOR V=S)" THEN a$ = "TO": GOTO record k = INSTR(a$, " "): IF k>0 THEN a$ = LEFT$(a$, k-1) k = INSTR(a$, "("): IF k>0 THEN a$ = LEFT$(a$, k-1) record: IF a$ <> pr$ THEN FILE_WRITELN 2, a$: pr$ = a$ END_IF END_WHILE FILE_CLOSE 1: FILE_CLOSE 2 RETURN La liste des mots-clés est récupérée par copier/coller sur la page principale du site Panoramic (Manuel de Référence). Elle est donc à tenir à jour en fonction des derniers développements. Je crois qu'il y a un moyen (développé par Klaus) de la récupérer depuis Panoramic_Editor, ce qui rendrait la chose automatique, c'est à voir, ce serait bien plus pratique et automatique. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Mise en forme de sources Panoramic (bis) Dim 12 Juin 2011 - 23:48 | |
| Ecoutes, je ne sais pas si je suis le seul interessé, mais je trouve que c'est un très bel exemple et bien pratique en plus Merci | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Mise en forme de sources Panoramic (bis) Lun 13 Juin 2011 - 0:18 | |
| J'adore. En plus, vraiment simple à mettre en pratique. Juste une question car tout y est clair sinon. Pourquoi tu n'aimes pas les Color ? - Code:
-
IF s$ = "COLOR" then stop Là, il y a une suptilité qui doit m'échapper ... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Mise en forme de sources Panoramic (bis) Lun 13 Juin 2011 - 0:27 | |
| Eh bien il y en a au moins un qui suit, ça fait plaisir ! Pour le stop sur Color, rassure-toi la subtilité m'échappe à moi aussi ! C'est sûrement un truc qui traîne du temps de la mise au point, il va falloir que je regarde ça. M'en souviens plus à mon avis il faut supprimer purement et simplement cette ligne... J'ai retrouvé le truc pour extraire les mots-clés de Panoramic_Editor.exe, mais ça fait appel à une ressource externe (ResHacker.exe) alors je ne le mets pas. Juste pour mon usage personnel. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Mise en forme de sources Panoramic (bis) Lun 13 Juin 2011 - 10:15 | |
| Bon, pas grand chose, mais je pense qu'il faudrait remplacer - Code:
-
IF p$ = "" OR LEFT$(a$, 1) = "'" OR LEFT$(p$, 3) = "REM" THEN GOTO Igno par - Code:
-
IF p$ = "" OR LEFT$(a$, 1) = "'" THEN GOTO Igno IF LEFT$(p$, 3) = "REM" THEN a$= LEFT$(p$, 3)+MID$(a$, 4, LEN(a$)) : GOTO Igno Qu'en penses-tu (d'accord, c'est mineur ) PS: JL35, toi qui maitrises l'enchainement de programme et d'execution de sources externes (si, si, j'ai vu dans tes programmes comme dans ceux de COSMOS ...), tu peux m'aider dans mon programme de tests de la DLL d'Enform. J'aimerai bien réussir à le finaliser, car je le trouve interessant sur le principe (je me lance des fleurs aussi, ...) et il ce veut réutilisable pour toute DLL qui manipule des données (pour le moment, travail sur 3 variables mais c'est arbitraires car ça répond aux besoins de la plupart des DLL, mais ont peut très facilement le régler sur 6 comme PANORAMIC) Bon, je ne squat pas plus ce sujet avec un autre ^^ | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Mise en forme de sources Panoramic (bis) Lun 13 Juin 2011 - 13:27 | |
| Ce que je fais avec les ressources externes est bien plus simple que ce que tu veux faire toi. Je me contente d'appeler un exécutable externe qui accepte l'activation en ligne de commande, puis je récupère le résultat dans un endroit convenu. Par exemple: - Code:
-
EXECUTE_WAIT "Notepad.exe " + Monfichier.txt qui lance le notepad pour édition du fichier donné ou bien - Code:
-
EXECUTE_WAIT "C:\Progra~1\Irfanv~1\i_view32.exe Monimage.jpg /convert=Monimage.bmp" pour un traitement sur une image (ici conversion). Mais l'appel à une DLL est beaucoup plus délicat, avec des paramètres précis en nombre et formulation et contenu, différents pour chaque dll... et là j'avoue que j'ai déjà utilisé des exemples de Klaus, mais sans trop chercher à en comprendre le fonctionnement, et je ne crois pas que je puisse t'être d'une grande là-dessus. L'utilisation que j'en fais c'est d'une boîte noire à laquelle je donne des paramètres et dont je récupère le résultat à la sortie... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Mise en forme de sources Panoramic (bis) Lun 13 Juin 2011 - 13:44 | |
| Merci JL35. Plus qu'à éspérer le retour de Klaus pour compléter notre pannel d'experts ^^.
Sinon, je me remettrais à cogiter autrement. Il doit y avoir une solution plus simple en jouant avec le poke et les peek. Si personne ne trouve de solution, j'y repenserai plus tard, avec un regard neuf ... | |
| | | Invité Invité
| Sujet: Re: Mise en forme de sources Panoramic (bis) Lun 13 Juin 2011 - 16:58 | |
| Bonjour à tous. @Jicehel Je ne comprend pas trop bien ce que tu veux. je mets ici un fichier zip à télécharger pour ne pas embrouiller le post de Nicolas. D’ailleurs si la discution doit se poursuivre, le mieux est d'en ouvrir un autre. Voir le Fichier : PRGpourforum.7zouvrir ensuite le source: menu programme extérieur.bas, modifier les chemins des 2 fichiers ligne 8 et 51. Au lancement celui-ci montre un list avec les commandes d'essai: ouvrir, fermer... ouvrir ouvre un autre programme qui doit-être exécutable vu que l'éditeur Panoramic ne fonctionne qu'avec un seul programme bas à la fois. A ce sujet, la fonction chain est plus intéressante, j'ai régulièrement plusieurs programme en mode bas, qui fonctionne simultanément. Seul soucis, les includes ne fonctionnent pas. On peut voir avec ce programme (qui était l'un des 1er prg à faire des trucs texte avec un picture), qu'il y a une interractivité entre les deux programmes. On peut manipuler depuis le menu l'autre programme, comme ouvrir le menu ou le fermer, envoyer du texte dans une cellule, comme depuis le second envoyer les paramètres au premier, comme la cellule cliquée, ou le contenant de celle-ci. Autre chose Klaus à fait une dll qui permet d'envoyer du texte d'un edit sur un autre edit dans un autre programme. Il me semble qu'il s'agit de IPC.dll . Il faut aller sur son site pour la récupérer. A Klaus! ??? Je retourne à mon boulot, mon navigateur était bloqué un bon moment à cause Host qui est en maintenance. Apparemment, celà fonctionne maintenant. |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Mise en forme de sources Panoramic (bis) Lun 13 Juin 2011 - 17:19 | |
| Merci Cosmos, je regarde ça. PS: ici on est dans le post de JL35, pas dans celui de Nicolas pour le programme de remise en forme ^^, on à juste fait un petit dérapage sur 2 (3 avec le tien ) post(s) mais ce n'est pas grave, JL35 avait recréé ce post pour me faire profiter de son reformateur de sources et pour que toutes les personnes interessées pouissent en profiter aussi ^^ PS2: et puis sur celui de Nicolas, on peu dérapper un peu, on a fait avancer le sujet et en plus, pour le moment, il n'est pas là !! PS3: Encore merci pour tes recherches, j'analyse et si ça marche, ke vous tiens au courant dans l'autre post (celui de la DLL d'Enform) | |
| | | Invité Invité
| Sujet: Re: Mise en forme de sources Panoramic (bis) Mar 14 Juin 2011 - 12:42 | |
| Oui effectivement on est dans le post de JL.
Je viens de voir que le programme: Text_simplifié_clipboard.bas est un peu différent que l'exécutable qui va avec.
Le but n'est pas d'ouvrir celui-ci, mais de fonctionner avec l'exécutable qui est présent avec "menu programme extérieur.bas".
Entre les 2 programmes, la communication se fait par le presse papier. Le but est qu'il y est une cohérence entre deux programmes.
Maintenant je vais faire une demande à Jack concernant la fonction EXECUTE. qui m'a posé un problème ce matin.
J'avais un programme d'essai plus simple. C'était un programme qui était en marche, et dont on envoyait directement les ordres par copier/coller (là l'exécutable n'était pas obligatoire). Je ne le retrouve pas, mais il me semble maintenant qu'il doit être sur le forum |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Mise en forme de sources Panoramic (bis) Mar 14 Juin 2011 - 13:36 | |
|
Dernière édition par Jicehel le Mer 15 Juin 2011 - 7:29, édité 1 fois | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Mise en forme de sources Panoramic (bis) Mar 14 Juin 2011 - 21:39 | |
| Quel rapport avec la mise en forme de sources ? | |
| | | Contenu sponsorisé
| Sujet: Re: Mise en forme de sources Panoramic (bis) | |
| |
| | | | Mise en forme de sources Panoramic (bis) | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |