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
» Calculatrice
par joeeee2017 Aujourd'hui à 18:49

» EPP_V01 éditeur pour Panoramic
par Minibug Hier à 21:03

» [RESOLU] Quelle ligne est sélectionnée dans SYNEDIT ?
par Jean Claude Hier à 21:02

» PanExpress : l'éditeur Panoramic avec création d'objet
par Minibug Hier à 15:58

» Planétarium virtuel.
par Pedro Alvarez Hier à 9:28

» Demande pour Jack concernant PanExpress
par Marc Mar 18 Sep 2018 - 23:56

» Petit coucou en passant !
par Minibug Dim 16 Sep 2018 - 15:03

» bug SEVERE fnc+sub : variables globales corrompus
par silverman Dim 16 Sep 2018 - 13:38

» Verrouiller un form en avant plan
par silverman Dim 16 Sep 2018 - 12:50

» Fin de l'aventure.
par Pedro Alvarez Sam 15 Sep 2018 - 18:16

» Demande d'explications Sur File_Write & File_writeln
par Jack Sam 15 Sep 2018 - 17:26

» MEMO avec des possibilités de commande
par Oscaribout Mer 12 Sep 2018 - 1:06

» La théorie du chaos
par jean_debord Mar 11 Sep 2018 - 9:30

» Orbites de l’ensemble de Mandelbrot
par Jean Claude Lun 10 Sep 2018 - 21:08

» Version instantanée V 0.9.29i2 du 4/09/2018
par silverman Mer 5 Sep 2018 - 10:15

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Septembre 2018
LunMarMerJeuVenSamDim
     12
3456789
10111213141516
17181920212223
24252627282930
CalendrierCalendrier

Partagez | 
 

 Analyser un code Panoramic

Aller en bas 
Aller à la page : 1, 2  Suivant
AuteurMessage
Marc

avatar

Nombre de messages : 865
Age : 57
Localisation : TOURS
Date d'inscription : 17/03/2014

MessageSujet: Analyser un code Panoramic   Dim 12 Nov 2017 - 1:12

Bonjour à tous !

Voici un petit utilitaire qui permet d’analyser un code source Panoramic.

Au départ,  je souhaitais pouvoir visualiser la structure des sous-programmes  LABEL / GOSUB / RETURN d’un source, en n'affichant que les lignes concernées avec leurs numéros de ligne. Ceci étant un bon moyen pour moi, de retrouver des erreurs de structure.

Puis, de fil en aiguille, j’y ai ajouté la visualisation des structures SUB / EXIT_SUB / END_SUB.

C’était trop bête de ne pas continuer, alors les structures :

-   IF / THEN / ELSE / END_IF
-   FOR / TO / STEP / EXIT_FOR / NEXT
-   WHILE / EXIT_WHILE / END_WHILE / REPEAT / EXIT_REPEAT / UNTIL

Edit : ajout de SELECT / CASE / END_SELECT

sont venues compléter l’ensemble.

Code:
' ------------------------------------------------------------------------------
'  PANORAMIC FILE ANALYSER Version 2
'  MARC37 - December 2017 - Panoramic v0.9.28.i12
'  http://panoramic-language.pagesperso-orange.fr/French/index.html
'  http://panoramic.forumotion.com
' ------------------------------------------------------------------------------
DIM a$
DIM b$ : ' Reading a line of BasicFileToAnalyse$
DIM c$ : ' uppercase of b$
DIM d$ : ' formatted line number as ######
DIM BasicFileToAnalyse$
DIM AlreadyExistingLine%
DIM i%, j% : ' variable loop FOR/NEXT
DIM k%, l%, f%
DIM LineLength%
DIM LineNumber%, FontSize%, MemoInUse%
DIM StartingLinePosition%
DIM Character$
DIM Word$, UpperWord$, LastWordDisplay$
DIM Line$
DIM z$
LABEL Resize, OpenFile, Bigger, Smaller, About, Save, Quit
LABEL Integral, AllLabel, AllSub, AllIf, AllDim, AllForNext, AllWhile, AllSelect, FindText, DataEntry, StringSearch
LABEL AllLabelMore, AllSubMore, AllDimMore
FontSize% = 10
DLIST 50 : ' hiden object => code source to analyze
DLIST 51 : ' hidden object => list of LABEL
DLIST 52 : ' hidden object => Source code Upper No Quotes
Mask()
ON_CLOSE 0, Quit
ON_RESIZE 0, Resize
ON_CLICK 1, OpenFile
ON_CLICK 2, Quit
ON_CLICK 3, About
ON_CLICK 4, Save
ON_CLICK 5, Integral
ON_CLICK 6, AllLabel
ON_CLICK 7, AllLabelMore
ON_CLICK 8, AllSub
ON_CLICK 9, AllSubMore
ON_CLICK 10, AllDim
ON_CLICK 11, AllDimMore
ON_CLICK 12, AllIf
ON_CLICK 13, AllForNext
ON_CLICK 14, ALLWhile
ON_CLICK 15, AllSelect
ON_CLICK 16, Smaller
ON_CLICK 17, Bigger
ON_CLiCK 18, FindText
END
' ------------------------------------------------------------------------------
FindText:
    OFF_CLICK 18
    FOR i%=20 TO 32
        HIDE i%
    NEXT i%
    SHOW 31
    MemoInUse% = 31
    IF TEXT$(18)="  >> Search >>" THEN TEXT 18,""        
    Word$=TEXT$(18)
    DISPLAY
    GOSUB StringSearch
RETURN
' ------------------------------------------------------------------------------
DataEntry:
    Word$=TEXT$(18)
    GOSUB StringSearch
RETURN
' ------------------------------------------------------------------------------
StringSearch:
    UpperWord$ = UPPER$(Word$)
    CLEAR 31
    WaitingMessage()
    DISPLAY
    FOR LineNumber% = 1 to COUNT(50)
        IF Word$=""
                b$=ITEM_READ$(20,LineNumber%)
            ITEM_ADD 31,b$
        ELSE    
            b$=UPPER$(ITEM_READ$(50,LineNumber%))
            IF INSTR(b$,UpperWord$)>0
                b$=ITEM_READ$(20,LineNumber%)
                ITEM_ADD 31,b$
            END_IF
        END_IF        
        ON_CHANGE 18, DataEntry
    NEXT LineNumber%
    HIDE 100
RETURN
' ------------------------------------------------------------------------------
OpenFile:
    IF OBJECT_EXISTS(40)=0 THEN OPEN_DIALOG 40
    FILTER 40,"*.bas, *.sav|*.bas;*.sav"
    BasicFileToAnalyse$=FILE_NAME$(40)
    IF BasicFileToAnalyse$="_" THEN RETURN
    CAPTION 0, BasicFileToAnalyse$
    CLEAR 50
    CLEAR 51
    CLEAR 52
    FOR i% = 20 TO 31
        CLEAR i%
    NEXT i%    
    IF RIGHT$(BasicFileToAnalyse$,4)= ".sav"
        BasicFileToAnalyse$ = LEFT$(BasicFileToAnalyse$,LEN(BasicFileToAnalyse$)-4)
        IF DIR_EXISTS(BasicFileToAnalyse$+"_txt")= 0 THEN DIR_MAKE BasicFileToAnalyse$+"_txt"
        ARCHIVER_ON
            ARCHIVER_EXTRACT BasicFileToAnalyse$+".sav",BasicFileToAnalyse$+"_txt"
        ARCHIVER_OFF
        FILE_LOAD 50,BasicFileToAnalyse$+"_txt\Source.txt"
        FOR i%=20 TO 31
        SELECT i%
            CASE 20 : FILE_LOAD i%,BasicFileToAnalyse$+"_txt\Integral.txt"
            CASE 21 : FILE_LOAD i%,BasicFileToAnalyse$+"_txt\Label.txt"
            CASE 22 : FILE_LOAD i%,BasicFileToAnalyse$+"_txt\Sub.txt"
            CASE 23 : FILE_LOAD i%,BasicFileToAnalyse$+"_txt\Dim.txt"
            CASE 24 : FILE_LOAD i%,BasicFileToAnalyse$+"_txt\If.txt"
            CASE 25 : FILE_LOAD i%,BasicFileToAnalyse$+"_txt\For.txt"
            CASE 26 : FILE_LOAD i%,BasicFileToAnalyse$+"_txt\While.txt"
            CASE 27 : FILE_LOAD i%,BasicFileToAnalyse$+"_txt\Select.txt"
            CASE 28 : FILE_LOAD i%,BasicFileToAnalyse$+"_txt\LabelMore.txt"
            CASE 29 : FILE_LOAD i%,BasicFileToAnalyse$+"_txt\SubMore.txt"
            CASE 30 : FILE_LOAD i%,BasicFileToAnalyse$+"_txt\DimMore.txt"
            CASE 31 : FILE_LOAD i%,BasicFileToAnalyse$+"_txt\Search.txt"
        END_SELECT
        NEXT i%
        TEXT 18, "  >> Search >>"  
        FOR i% = 4 TO 18
            SHOW i%
        NEXT i%
        RETURN
    END_IF
    FOR i% = 4 TO 18
        HIDE i%
    NEXT i%
    OFF_RESIZE 0
    OFF_CLICK 1
    OFF_CHANGE 18
    ON_CLiCK 18, FindText
    LineNumber% = 1
    FOR i% = 21 to 32
        HIDE i%
    NEXT i%
    SHOW 20
    TEXT 18, "  >> Search >>"  
    WaitingMessage()
    FILE_OPEN_READ 40,BasicFileToAnalyse$
    WHILE FILE_EOF(40)<>1
        FILE_READLN 40,b$
        d$=STR$(LineNumber%)
        WHILE LEN(d$)<6
            d$=" "+d$
        END_WHILE
        c$=UPPER$(b$)
        QuoteFilter()
        ITEM_ADD 50, b$
        ITEM_ADD 20, d$+" "+b$
        LineNumber% = LineNumber% + 1
    END_WHILE
    FILE_CLOSE 40
    Analyse()
    HIDE 100
    ON_RESIZE 0, Resize
    ON_CLICK 1, OpenFile
RETURN
' ------------------------------------------------------------------------------
SUB QuoteFilter()
    DIM_LOCAL DoubleQuote%
    LineLength% = LEN(c$)
    IF LineLength% = 0
        ITEM_ADD 52,""
        EXIT_SUB
    END_IF
    IF INSTR(c$,"REM ")>0
        IF INSTR(c$,"REM ")=1 OR INSTR(c$," REM ")>0 OR INSTR(c$,":REM ")>0
            c$= LEFT$(b$,INSTR(c$,"REM"))
            ITEM_ADD 52, c$
            EXIT_SUB
        END_IF    
    END_IF
    IF LineLength% > 0
        DoubleQuote% = 0
        Line$=""
        FOR i% = 1 to LineLength%
            Character$=MID$(c$,i%,1)
            IF Character$ = CHR$(39) AND DoubleQuote% = 0
                ITEM_ADD 52, Line$
                EXIT_SUB
            END_IF
            IF Character$ = CHR$(34) THEN DoubleQuote% = DoubleQuote% + 1
            IF DoubleQuote% = 1 THEN Character$ = "x"
            IF DoubleQuote% = 2 THEN DoubleQuote% = 0    
            Line$ = Line$ + Character$
        NEXT i%
        ITEM_ADD 52, Line$
    END_IF    
END_SUB
' ------------------------------------------------------------------------------
SUB Analyse()
    IF COUNT(50) = 0
        HIDE 100
        IF MESSAGE_WARNING_OK("This file is empty !")=1 THEN EXIT_SUB
    END_IF
    ExtractingLabelNames()
    FOR LineNumber% = 1 to COUNT(50)
        AlreadyExistingLine% = 0
        b$=ITEM_READ$(50,LineNumber%)
        c$=ITEM_READ$(52,LineNumber%)
        LineLength% = LEN(c$)
        d$=STR$(LineNumber%)
        WHILE LEN(d$)<6
            d$=" "+d$
        END_WHILE
        DisplayLabel()
        DisplaySub()
        DisplayIf()
        DisplayDim()
        DisplayFor()
        DisplayWhile()
        DisplaySelect()
    NEXT LineNumber%
    ITEM_ADD 28, "                   Number of LABEL(s) : .................. "+STR$(COUNT(28))
    ITEM_ADD 29, "                   Number of SUB(s) : .................. "+STR$(COUNT(29))
    ITEM_ADD 30, "                   Number of DIM(s) : ................ "+STR$(COUNT(30))
    FOR i% = 4 TO 18
        SHOW i%
    NEXT i%
END_SUB
' ------------------------------------------------------------------------------
SUB ExtractingLabelNames()
    FOR LineNumber% = 1 to COUNT(50)
        b$=ITEM_READ$(50,LineNumber%)
        c$=ITEM_READ$(52,LineNumber%)
        IF INSTR(c$,"LABEL ")>0
            IF INSTR(c$,"LABEL ")=1 OR INSTR(c$," LABEL ")>0 OR INSTR(c$,":LABEL ")>0
                StartingLinePosition% = INSTR(c$,"LABEL ")+6
                LineLength%=LEN(b$)
                Word$ = ""
                FOR j% = StartingLinePosition% TO LineLength%
                    Character$=MID$(b$,j%,1)
                    IF ASC(Character$) = 58
                        Word$=Word$+":"
                        ITEM_ADD 51, Word$
                        Word$ = ""
                        EXIT_FOR
                    END_IF
                    IF ASC(Character$)>47
                        Word$ = Word$ + Character$
                    END_IF
                    IF j% = LineLength% OR ASC(Character$) = 32 OR ASC(Character$) = 44
                        IF ASC(Word$) > 47
                            Word$=Word$+":"
                            ITEM_ADD 51, Word$
                            Word$ = ""
                        END_IF    
                    END_IF    
                NEXT j%
            END_IF    
        END_IF
    NEXT LineNumber%
END_SUB
' ------------------------------------------------------------------------------
SUB DisplayLabel()
    IF INSTR(c$,"LABEL ")>0
        IF INSTR(c$,"LABEL ")=1 OR INSTR(c$," LABEL ")>0 OR INSTR(c$,":LABEL ")>0
            ITEM_ADD 21, d$+" "+b$
            AlreadyExistingLine%=1
        END_IF
    END_IF
    IF AlreadyExistingLine%=0 AND INSTR(c$,"GOSUB ")>0
        IF INSTR(c$,"GOSUB ")=1 OR INSTR(c$," GOSUB ")>0 OR INSTR(c$,":GOSUB ")>0
           ITEM_ADD 21, d$+" "+b$
           AlreadyExistingLine%=1
        END_IF    
    END_IF
    IF AlreadyExistingLine% = 0 and COUNT(51) > 0
        FOR i% = 1 to COUNT(51)
            Word$ = ITEM_READ$(51,i%)
            UpperWord$=UPPER$(Word$)
            IF INSTR(c$,UpperWord$)>0
                j% = INSTR(c$,UpperWord$)
                IF INSTR(c$,UpperWord$)=1
                    ITEM_ADD 21,""
                    ITEM_ADD 21, d$+" "+b$
                    ITEM_ADD 28, "      " + Word$ + " "+ STRING$(70-len(Word$),".")+ d$
                    AlreadyExistingLine% = 1
                END_IF
                IF J%>1
                    IF MID$(b$,j%-1,1)= CHR$(32) OR MID$(b$,j%-1,1)= CHR$(58)
                        ITEM_ADD 21,""
                        ITEM_ADD 21, d$+" "+b$
                        ITEM_ADD 28, "      " + Word$ + " "+ STRING$(70-len(Word$),".")+ d$
                        AlreadyExistingLine% = 1
                    END_IF    
                END_IF    
            END_IF    
        NEXT i%
    END_IF
    IF AlreadyExistingLine%=0 AND INSTR(c$,"RETURN")>0
        IF INSTR(c$,"RETURN ")=1 OR INSTR(c$,"RETURN:")=1 OR INSTR(c$," RETURN ")>0 OR INSTR(c$,":RETURN ")>0 OR INSTR(c$,":RETURN:")> 0 OR INSTR(c$," RETURN:")> 0 OR INSTR(c$," RETURN") = (LineLength%-6) OR INSTR(c$,":RETURN") = (LineLength%-6)
            ITEM_ADD 21, d$+" "+b$
            AlreadyExistingLine%=1
        END_IF
    END_IF
END_SUB
' ------------------------------------------------------------------------------
SUB DisplaySub()
    IF INSTR(c$,"SUB ")>0
        IF INSTR(c$,"SUB ")=1 OR INSTR(c$," SUB ")>0 OR INSTR(c$,":SUB ")>0
            ITEM_ADD 22, d$+" "+b$
            ITEM_ADD 29, "      " + b$ + " "+ STRING$(70-len(b$),".")+ d$
            AlreadyExistingLine%=1
        END_IF    
    END_IF
    IF AlreadyExistingLine%=0 AND INSTR(c$,"EXIT_SUB")>0
        IF INSTR(c$,"EXIT_SUB ")=1 OR INSTR(c$,"EXIT_SUB:")=1 OR INSTR(c$," EXIT_SUB ")>0 OR INSTR(c$,":EXIT_SUB ")>0 OR INSTR(c$,":EXIT_SUB:")> 0 OR INSTR(c$," EXIT_SUB:")> 0 OR INSTR(c$," EXIT_SUB") = (LineLength%-8) OR INSTR(c$,":EXIT_SUB") = (LineLength%-8)
            ITEM_ADD 22, d$+" "+b$
            AlreadyExistingLine%=1
        END_IF
    END_IF
    IF AlreadyExistingLine%=0 AND INSTR(c$,"END_SUB")>0
        IF INSTR(c$,"END_SUB ")=1 OR INSTR(c$,"END_SUB:")=1 OR INSTR(c$," END_SUB ")>0 OR INSTR(c$,":END_SUB ")>0 OR INSTR(c$,":END_SUB:")> 0 OR INSTR(c$," END_SUB:")> 0 OR INSTR(c$," END_SUB") = (LineLength%-7) OR INSTR(c$,":END_SUB") = (LineLength%-7)
            ITEM_ADD 22, d$+" "+b$
            ITEM_ADD 22, ""
            AlreadyExistingLine%=1
        END_IF    
    END_IF
END_SUB
' ------------------------------------------------------------------------------
SUB DisplayIf()
    z$=" THEN "
    IF INSTR(c$,"IF ")>0  
        IF INSTR(c$,"IF ")=1 OR INSTR(c$," IF ")>0 OR INSTR(c$,":IF ")>0
            ITEM_ADD 24, d$+" "+b$
            IF INSTR(c$,z$)>0 THEN ITEM_ADD 24,""
            AlreadyExistingLine%=1
            LastWordDisplay$="IF"
        END_IF    
    END_IF
    IF AlreadyExistingLine%=0
        IF INSTR(c$,z$)>0
            ITEM_ADD 24, d$+" "+b$
            ITEM_ADD 24,"" : beep
            AlreadyExistingLine%=1
            LastWordDisplay$=z$
        END_IF
    END_IF
    IF AlreadyExistingLine%=0 AND INSTR(c$,"ELSE")>0
        IF INSTR(c$,"ELSE ")=1 OR INSTR(c$,"ELSE:")=1 OR INSTR(c$," ELSE ")>0 OR INSTR(c$,":ELSE ")>0 OR INSTR(c$,":ELSE:")> 0 OR INSTR(c$," ELSE:")> 0 OR INSTR(c$," ELSE") = (LineLength%-4) OR INSTR(c$,":ELSE") = (LineLength%-4)
            ITEM_ADD 24, d$+" "+b$
            AlreadyExistingLine%=1
            LastWordDisplay$="ELSE"
        END_IF
    END_IF
    IF AlreadyExistingLine%=0 AND INSTR(c$,"END_IF")>0
        IF INSTR(c$,"END_IF ")=1 OR INSTR(c$,"END_IF:")=1 OR INSTR(c$," END_IF ")>0 OR INSTR(c$,":END_IF ")>0 OR INSTR(c$,":END_IF:")> 0 OR INSTR(c$," END_IF:")> 0 OR INSTR(c$," END_IF") = (LineLength%-6) OR INSTR(c$,":END_IF") = (LineLength%-6)
            ITEM_ADD 24, d$+" "+b$
            LastWordDisplay$="END_IF"
            AlreadyExistingLine%=1
        END_IF    
    END_IF
END_SUB
' ------------------------------------------------------------------------------
SUB DisplayDim()
    IF INSTR(c$,"DIM ")>0
        IF INSTR(c$,"DIM ")=1 OR INSTR(c$," DIM ")>0 OR INSTR(c$,":DIM ")>0
            k% = 4
            ITEM_ADD 23, d$+" "+b$
            DisplayDimMore()
            AlreadyExistingLine%=1
        END_IF    
    END_IF
    IF INSTR(c$,"DIM_LOCAL ")>0
        IF INSTR(c$,"DIM_LOCAL ")=1 OR INSTR(c$," DIM_LOCAL ")>0 OR INSTR(c$,":DIM_LOCAL ")>0
            k% = 10
            ITEM_ADD 23, d$+" "+b$
            DisplayDimMore()
            AlreadyExistingLine%=1
        END_IF    
    END_IF
    IF INSTR(c$,"FREE ")>0
        IF INSTR(c$,"FREE ")=1 OR INSTR(c$," FREE ")>0 OR INSTR(c$,":FREE ")>0
            ITEM_ADD 23, d$+" "+b$
            AlreadyExistingLine%=1
        END_IF    
    END_IF      
END_SUB
' ------------------------------------------------------------------------------
SUB DisplayDimMore()
    IF k% = 4 THEN StartingLinePosition% = INSTR(c$,"DIM ")+4
    IF k% = 10 THEN StartingLinePosition% = INSTR(c$,"DIM_LOCAL ")+10
    LineLength%=LEN(b$)
    Word$ = ""
    f% = 0
    FOR j% = StartingLinePosition% TO LineLength%
        Character$=MID$(b$,j%,1)
        IF ASC(Character$)=40 THEN f%=1
        IF ASC(Character$)=41 THEN f%=0
        IF ASC(Character$)=44 AND f%=0 AND Word$<>""
            IF k% = 4 THEN ITEM_ADD 30, "       " + Word$ + " " + STRING$(70-len(Word$),".")+d$+" DIM"
            IF k% = 10 THEN ITEM_ADD 30, "       " + Word$ + " " + STRING$(70-len(Word$),".")+d$+" DIM_LOCAL"
            Word$ = ""
        END_IF
        IF ASC(Character$)<>44 AND ASC(Character$)<>58 AND ASC(Character$)>35 THEN Word$ = Word$ + Character$
        IF ASC(Character$)=44 AND f%=1 THEN Word$ = Word$ + Character$
        IF ASC(Character$)=58 OR j% = LineLength%
            IF Word$<>""
                IF k% = 4 THEN ITEM_ADD 30, "       " + Word$ + " " + STRING$(70-len(Word$),".")+d$+" DIM"
                IF k% = 10 THEN ITEM_ADD 30, "       " + Word$ + " " + STRING$(70-len(Word$),".")+d$+" DIM_LOCAL"
            END_IF
            Word$ = ""
            EXIT_FOR
        END_IF      
    NEXT j%
END_SUB
' ------------------------------------------------------------------------------
SUB DisplayFor()
    IF INSTR(c$,"FOR ")>0
        IF INSTR(c$,"FOR ")=1 OR INSTR(c$," FOR ")>0 OR INSTR(c$,":FOR ")>0
            ITEM_ADD 25, d$+" "+b$
            AlreadyExistingLine%=1
        END_IF    
    END_IF
    IF AlreadyExistingLine%=0 AND INSTR(c$," TO ")>0 THEN ITEM_ADD 25, d$+" "+b$ : AlreadyExistingLine%=1
    IF AlreadyExistingLine%=0 AND INSTR(c$," STEP ")>0 THEN ITEM_ADD 25, d$+" "+b$ : AlreadyExistingLine%=1
    IF AlreadyExistingLine%=0 AND INSTR(c$,"EXIT_FOR")>0
        IF INSTR(c$,"EXIT_FOR ")=1 OR INSTR(c$,"EXIT_FOR:")=1 OR INSTR(c$," EXIT_FOR ")>0 OR INSTR(c$,":EXIT_FOR ")>0 OR INSTR(c$,":EXIT_FOR:")> 0 OR INSTR(c$," EXIT_FOR:")> 0 OR INSTR(c$," EXIT_FOR") = (LineLength%-8) OR INSTR(c$,":EXIT_FOR") = (LineLength%-8)
            ITEM_ADD 25, d$+" "+b$
            AlreadyExistingLine%=1
        END_IF
    END_IF
    IF AlreadyExistingLine%=0 AND INSTR(c$,"NEXT ")>0
        IF INSTR(c$,"NEXT ")=1 OR INSTR(c$," NEXT ")>0 OR INSTR(c$,":NEXT ")>0
            ITEM_ADD 25, d$+" "+b$
            ITEM_ADD 25,""
            AlreadyExistingLine%=1
        END_IF
    END_IF    
END_SUB
' ------------------------------------------------------------------------------
SUB DisplayWhile()
    IF INSTR(c$,"WHILE ")>0
        IF INSTR(c$,"WHILE ")=1 OR INSTR(c$," WHILE ")>0 OR INSTR(c$,":WHILE ")>0
            ITEM_ADD 26, d$+" "+b$
            AlreadyExistingLine%=1
        END_IF    
    END_IF
    IF INSTR(c$,"REPEAT")>0
        IF INSTR(c$,"REPEAT ")=1 OR INSTR(c$,"REPEAT:")=1 OR INSTR(c$," REPEAT ")>0 OR INSTR(c$,":REPEAT ")>0 OR INSTR(c$,":REPEAT:")> 0 OR INSTR(c$," REPEAT:")> 0 OR INSTR(c$," REPEAT") = (LineLength%-6) OR INSTR(c$,":REPEAT") = (LineLength%-6)
            ITEM_ADD 26, d$+" "+b$
            AlreadyExistingLine%=1
        END_IF    
    END_IF
    IF AlreadyExistingLine%=0 AND INSTR(c$,"EXIT_WHILE")>0
        IF INSTR(c$,"EXIT_WHILE ")=1 OR INSTR(c$,"EXIT_WHILE:")=1 OR INSTR(c$," EXIT_WHILE ")>0 OR INSTR(c$,":EXIT_WHILE ")>0 OR INSTR(c$,":EXIT_WHILE:")> 0 OR INSTR(c$," EXIT_WHILE:")> 0 OR INSTR(c$," EXIT_WHILE") = (LineLength%-10) OR INSTR(c$,":EXIT_WHILE") = (LineLength%-10)
            ITEM_ADD 26, d$+" "+b$
            AlreadyExistingLine%=1
        END_IF
    END_IF
    IF AlreadyExistingLine%=0 AND INSTR(c$,"EXIT_REPEAT")>0
        IF INSTR(c$,"EXIT_REPEAT ")=1 OR INSTR(c$,"EXIT_REPEAT:")=1 OR INSTR(c$," EXIT_REPEAT ")>0 OR INSTR(c$,":EXIT_REPEAT ")>0 OR INSTR(c$,":EXIT_REPEAT:")> 0 OR INSTR(c$," EXIT_REPEAT:")> 0 OR INSTR(c$," EXIT_REPEAT") = (LineLength%-11) OR INSTR(c$,":EXIT_REPEAT") = (LineLength%-11)
            ITEM_ADD 26, d$+" "+b$
            AlreadyExistingLine%=1
        END_IF
    END_IF
    IF AlreadyExistingLine%=0 AND INSTR(c$,"END_WHILE")>0
        IF INSTR(c$,"END_WHILE ")=1 OR INSTR(c$,"END_WHILE:")=1 OR INSTR(c$," END_WHILE ")>0 OR INSTR(c$,":END_WHILE ")>0 OR INSTR(c$,":END_WHILE:")> 0 OR INSTR(c$," END_WHILE:")> 0 OR INSTR(c$," END_WHILE") = (LineLength%-9) OR INSTR(c$,":END_WHILE") = (LineLength%-9)
            ITEM_ADD 26, d$+" "+b$
            AlreadyExistingLine%=1
        END_IF    
    END_IF
    IF AlreadyExistingLine%=0 AND INSTR(c$,"UNTIL")>0
        IF INSTR(c$,"UNTIL ")=1 OR INSTR(c$," UNTIL ")>0 OR INSTR(c$,":UNTIL ")>0
            ITEM_ADD 26, d$+" "+b$
            ITEM_ADD 26, ""
            AlreadyExistingLine%=1
        END_IF    
    END_IF
END_SUB
' ------------------------------------------------------------------------------
SUB DisplaySelect()
    IF INSTR(c$,"SELECT ")>0
       IF INSTR(c$,"SELECT ")=1 OR INSTR(c$," SELECT ")>0 OR INSTR(c$,":SELECT ")>0
            ITEM_ADD 27, d$+" "+b$
            AlreadyExistingLine%=1
        END_IF    
    END_IF
    IF INSTR(c$,"CASE ")>0
        IF INSTR(c$,"CASE ")=1 OR INSTR(c$," CASE ")>0 OR INSTR(c$,":CASE ")>0
            ITEM_ADD 27, d$+" "+b$
            AlreadyExistingLine%=1
        END_IF    
    END_IF
    IF AlreadyExistingLine%=0 AND INSTR(c$,"END_SELECT")>0
        IF INSTR(c$,"END_SELECT ")=1 OR INSTR(c$,"END_SELECT:")=1 OR INSTR(c$," END_SELECT ")>0 OR INSTR(c$,":END_SELECT ")>0 OR INSTR(c$,":END_SELECT:")> 0 OR INSTR(c$," END_SELECT:")> 0 OR INSTR(c$," END_SELECT") = (LineLength%-10) OR INSTR(c$,":END_SELECT") = (LineLength%-10)
            ITEM_ADD 27, d$+" "+b$
            ITEM_ADD 27, ""
            AlreadyExistingLine%=1
        END_IF    
    END_IF
END_SUB
' ------------------------------------------------------------------------------
Integral:
    FOR i%=20 TO 32
        HIDE i%
    NEXT i%
    SHOW 20
    MemoInUse% = 20
    IF TEXT$(18) = "" THEN TEXT 18, "  >> Search >>"  
    ON_CLiCK 18, FindText
RETURN
' ------------------------------------------------------------------------------
AllLabel:
    FOR i%=20 TO 32
        HIDE i%
    NEXT i%
    SHOW 21
    MemoInUse% = 21
    IF TEXT$(18) = "" THEN TEXT 18, "  >> Search >>"  
    ON_CLiCK 18, FindText
RETURN
' ------------------------------------------------------------------------------
AllSub:
    FOR i%=20 TO 32
        HIDE i%
    NEXT i%
    SHOW 22
    MemoInUse% = 22
    IF TEXT$(18) = "" THEN TEXT 18, "  >> Search >>"  
    ON_CLiCK 18, FindText
RETURN
' ------------------------------------------------------------------------------
AllIf:
    FOR i%=20 TO 32
        HIDE i%
    NEXT i%
    SHOW 24
    MemoInUse% = 24
    IF TEXT$(18) = "" THEN TEXT 18, "  >> Search >>"  
    ON_CLiCK 18, FindText
RETURN
' ------------------------------------------------------------------------------
AllDim:
    FOR i%=20 TO 32
        HIDE i%
    NEXT i%
    SHOW 23
    MemoInUse% = 23
    IF TEXT$(18) = "" THEN TEXT 18, "  >> Search >>"  
    ON_CLiCK 18, FindText
RETURN
' ------------------------------------------------------------------------------
AllForNext:
    FOR i%=20 TO 32
        HIDE i%
    NEXT i%
    SHOW 25
    MemoInUse% = 25
    IF TEXT$(18) = "" THEN TEXT 18, "  >> Search >>"  
    ON_CLiCK 18, FindText
RETURN
' ------------------------------------------------------------------------------
AllWhile:
    FOR i%=20 TO 32
        HIDE i%
    NEXT i%
    SHOW 26
    MemoInUse% = 26
    IF TEXT$(18) = "" THEN TEXT 18, "  >> Search >>"  
    ON_CLiCK 18, FindText
RETURN
' ------------------------------------------------------------------------------
AllSelect:
    FOR i%=20 TO 32
        HIDE i%
    NEXT i%
    SHOW 27
    MemoInUse% = 27
    IF TEXT$(18) = "" THEN TEXT 18, "  >> Search >>"  
    ON_CLiCK 18, FindText
RETURN
' ------------------------------------------------------------------------------
AllLabelMore:
    FOR i%=20 TO 32
        HIDE i%
    NEXT i%
    SHOW 28
    MemoInUse% = 28
    IF TEXT$(18) = "" THEN TEXT 18, "  >> Search >>"  
    ON_CLiCK 18, FindText
RETURN
' ------------------------------------------------------------------------------
AllSubMore:
    FOR i%=20 TO 32
        HIDE i%
    NEXT i%
    SHOW 29
    MemoInUse% = 29
    IF TEXT$(18) = "" THEN TEXT 18, "  >> Search >>"  
    ON_CLiCK 18, FindText
RETURN
' ------------------------------------------------------------------------------
AllDimMore:
    FOR i%=20 TO 32
        HIDE i%
    NEXT i%
    SHOW 30
    MemoInUse% = 30
    IF TEXT$(18) = "" THEN TEXT 18, "  >> Search >>"  
    ON_CLiCK 18, FindText
RETURN
' ------------------------------------------------------------------------------
About:
    FOR i%=20 TO 32
        HIDE i%
    NEXT i%
    SHOW 32
    MemoInUse% = 32
    IF TEXT$(18) = "" THEN TEXT 18, "  >> Search >>"  
    ON_CLiCK 18, FindText
RETURN
' ------------------------------------------------------------------------------
Resize:
    FOR i% = 20 TO 32
        WIDTH i%, (WIDTH(0)-100)
        HEIGHT i%, (HEIGHT(0)-60)
    NEXT i%
RETURN
' ------------------------------------------------------------------------------
Bigger:
    FontSize%=FontSize% + 1
    IF FontSize% > 16 THEN FontSize% = 16 : RETURN
    FOR i% = 20 TO 32
        FONT_SIZE i%, FontSize%
    NEXT i%
    HIDE MemoInUse% : SHOW MemoInUse%
RETURN
' ------------------------------------------------------------------------------
Smaller:
    FontSize%=FontSize% - 1
    IF FontSize% < 8 THEN FontSize% = 8 : RETURN
    FOR i% = 20 TO 32
        FONT_SIZE i%, FontSize%
    NEXT i%
    HIDE MemoInUse% : SHOW MemoInUse%
RETURN
' ------------------------------------------------------------------------------
SUB Mask()
    WIDTH 0, 1025
        HEIGHT 0, 727
        LEFT 0,(SCREEN_X-WIDTH(0))/2
        TOP 0,(SCREEN_Y-HEIGHT(0))/2
        COLOR 0, 120,120,130
    BUTTON 1
        WIDTH 1, 100
        HEIGHT 1, 25
        LEFT 1,13
        TOP 1,10
        CAPTION 1, "&Open"
    BUTTON 2
        WIDTH 2, 100
        HEIGHT 2, 25
        LEFT 2,13
        TOP 2, 650
        CAPTION 2, "&Quit"
    BUTTON 3
        WIDTH 3, 100
        HEIGHT 3, 25
        LEFT 3,13
        TOP 3, 610
        CAPTION 3, "&About"
    CREATE_HIDE
    BUTTON 4
        WIDTH 4, 100
        HEIGHT 4, 25
        LEFT 4,13
        TOP 4,50
        CAPTION 4, "Sa&ve"
    BUTTON 5
        WIDTH 5, 100
        HEIGHT 5, 25
        LEFT 5,13
        TOP 5,125    
        CAPTION 5, "&Integral"  
    BUTTON 6
        WIDTH 6, 75
        HEIGHT 6, 25
        LEFT 6,13
        TOP 6,165    
        HINT 6, "Label, Gosub, Return"
        CAPTION 6, "&Label"  
    BUTTON 7
        WIDTH 7, 25
        HEIGHT 7, 25
        LEFT 7,88
        TOP 7,165    
        CAPTION 7, "+"  
    BUTTON 8
        WIDTH 8, 75
        HEIGHT 8, 25
        LEFT 8,13
        TOP 8,205    
        HINT 8, "Sub, Exit_Sub, End_sub"
        CAPTION 8, "S&UB"  
    BUTTON 9
        WIDTH 9, 25
        HEIGHT 9, 25
        LEFT 9,88
        TOP 9,205    
        CAPTION 9, "+"  
    BUTTON 10
        WIDTH 10, 75
        HEIGHT 10, 25
        LEFT 10,13
        TOP 10,245    
        HINT 10, "Dim, Local_Dim, Free"
        CAPTION 10, "&DIM"  
    BUTTON 11
        WIDTH 11, 25
        HEIGHT 11, 25
        LEFT 11,88
        TOP 11,245    
        CAPTION 11, "+"  
    BUTTON 12
        WIDTH 12, 100
        HEIGHT 12, 25
        LEFT 12,13
        TOP 12,285    
        HINT 12, "If, Then, Else, End_if"
        CAPTION 12, "&IF"  
    BUTTON 13
        WIDTH 13, 100
        HEIGHT 13, 25
        LEFT 13,13
        TOP 13,325    
        HINT 13, "For, To, Step, Exit_For, Next"
        CAPTION 13, "&FOR"  
    BUTTON 14
        WIDTH 14, 100
        HEIGHT 14, 25
        LEFT 14,13
        TOP 14,365    
        HINT 14, "While, Exit_While, End_While, Repeat, Exit_Repeat, Until"  
        CAPTION 14, "&WHILE"  
    BUTTON 15
        WIDTH 15, 100
        HEIGHT 15, 25
        LEFT 15,13
        TOP 15,405    
        HINT 15, "Select, Case, End_Select"  
        CAPTION 15, "SE&LECT"  
    BUTTON 16
        WIDTH 16, 100
        HEIGHT 16, 25
        LEFT 16,13
        TOP 16,530    
        CAPTION 16, "S&maller"  
    BUTTON 17
        WIDTH 17, 100
        HEIGHT 17, 25
        LEFT 17,13
        TOP 17,570    
        CAPTION 17, "B&igger"  
    EDIT 18
        WIDTH 18, 100
        HEIGHT 18, 25
        LEFT 18,13
        TOP 18,470    
        TEXT 18, "  >> Search >>"  
    for i% = 1 to 18 : font_bold i% : next i%
    FOR i%= 20 TO 33
        LIST i%
        LEFT i%, 125
        TOP i%,10
        WIDTH i%, 870
        HEIGHT i%, 666
        FONT_NAME i%,"Courier New"
        FONT_SIZE i%,10
    NEXT i%
    SORT 28      
    SORT_ON 28
    SORT 29
    SORT_ON 29
    SORT 30
    SORT_ON 30
    SHOW 20
    TextAbout()
    MessageBox()
END_SUB
' ------------------------------------------------------------------------------
SUB MessageBox()
    PANEL 100
        WIDTH 100,300
        HEIGHT 100,200
        FONT_NAME 100,"Arial"
        FONT_SIZE 100,14
    COMMAND_TARGET_IS 100
    ALPHA 101
        TOP 101, 60
        LEFT 101, 100
        CAPTION 101, "Please wait"
    ALPHA 102
        TOP 102, 110
        LEFT 102, 60
        CAPTION 102, "Analyse in progress..."
    COMMAND_TARGET_IS 0
    SHOW 101
    SHOW 102
END_SUB
' ------------------------------------------------------------------------------
SUB WaitingMessage()
    TOP 100, (HEIGHT_CLIENT(0)-200)/2
    LEFT 100, (WIDTH_CLIENT(0)-300)/2
    SHOW 100
END_SUB
' ------------------------------------------------------------------------------
SUB TextAbout()
    ITEM_ADD 32,""
    b$="                      PANORAMIC FILE ANALYSER"
    ITEM_ADD 32, b$
    b$="            MARC - December 2017 - Panoramic v0.9.28.i12"
    ITEM_ADD 32, b$
    b$="  http://panoramic-language.pagesperso-orange.fr/French/index.html"
    ITEM_ADD 32, b$
    b$="                 http://panoramic.forumotion.com"
    ITEM_ADD 32, b$
END_SUB
' ------------------------------------------------------------------------------
Save:
    IF OBJECT_EXISTS(41)=0 THEN SAVE_DIALOG 41
    FILTER 41,"*.sav|*.sav"
    a$=FILE_NAME$(41)
    IF a$="_" THEN RETURN
    IF RIGHT$(a$,4)= ".sav" THEN a$ = LEFT$(a$,LEN(a$)-4)
    IF DIR_EXISTS(a$+"_txt")= 0 THEN DIR_MAKE a$+"_txt"
    FILE_SAVE 50,a$+"_txt\Source.txt"
    FOR i%=20 TO 31
        SELECT i%
            CASE 20 : FILE_SAVE i%,a$+"_txt\Integral.txt"
            CASE 21 : FILE_SAVE i%,a$+"_txt\Label.txt"
            CASE 22 : FILE_SAVE i%,a$+"_txt\Sub.txt"
            CASE 23 : FILE_SAVE i%,a$+"_txt\Dim.txt"
            CASE 24 : FILE_SAVE i%,a$+"_txt\If.txt"
            CASE 25 : FILE_SAVE i%,a$+"_txt\For.txt"
            CASE 26 : FILE_SAVE i%,a$+"_txt\While.txt"
            CASE 27 : FILE_SAVE i%,a$+"_txt\Select.txt"
            CASE 28 : FILE_SAVE i%,a$+"_txt\LabelMore.txt"
            CASE 29 : FILE_SAVE i%,a$+"_txt\SubMore.txt"
            CASE 30 : FILE_SAVE i%,a$+"_txt\DimMore.txt"
            CASE 31 : FILE_SAVE i%,a$+"_txt\Search.txt"
        END_SELECT
    NEXT i%
    ARCHIVER_ON
        ARCHIVER_ADD a$+"_txt",a$+".sav"
    ARCHIVER_OFF
RETURN
' ------------------------------------------------------------------------------
Quit:
    TERMINATE
RETURN

EDIT : Mise à jour du code, ajout des structures SELECT / CASE / END_SELECT.

2ème EDIT : Mise à jour du code, sur une idée de Papydall, amélioration des boutons de sélection.


Dernière édition par Marc le Mar 26 Déc 2017 - 15:50, édité 4 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Analyser un code Panoramic   Dim 12 Nov 2017 - 1:23

Intéressant, ton utilitaire ! Je vais le tester sur un source un peu plus vaste. sur un petot source, il donne des résultats clairs et utiles.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Jean Claude

avatar

Nombre de messages : 5642
Age : 64
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Analyser un code Panoramic   Dim 12 Nov 2017 - 9:51

Bravo Marc37,

Je viens à l'instant de tester sur un code de 2200 lignes.

C'est génial, on a les départs de boucle et les fins de boucle et aussi les sorties de boucle. Et c'est idem pour les sous-programmes de type LABEL ou SUB.

Voilà qui peut aider au débogage d'un code ! cheers

Je me garde cet utilitaire sous le coude.

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Marc

avatar

Nombre de messages : 865
Age : 57
Localisation : TOURS
Date d'inscription : 17/03/2014

MessageSujet: Re: Analyser un code Panoramic   Dim 12 Nov 2017 - 13:16

Merci Klaus et Jean-Claude pour vos réponses !

J'ai modifié mon premier post pour mettre à jour le code :

J'ai ajouté les structures SELECT / CASE / END_SELECT.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5642
Age : 64
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Analyser un code Panoramic   Dim 12 Nov 2017 - 13:43

Citation :
J'ai ajouté les structures SELECT / CASE / END_SELECT.
Papydall va être ravis ! Very Happy

Personnellement et pour te récompenser de ton partage , voici ce que j'ai maintenant sur mon bureau:


J'ajoute que grâce à ton "Analyser de structure de code" on voit bien l'utilité de faire une indentation dans nos codes.

Pour ceux qui veulent en savoir plus sur l'identation => https://fr.wikipedia.org/wiki/Style_d%27indentation

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5990
Age : 68
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Analyser un code Panoramic   Dim 12 Nov 2017 - 15:39

Bonjour tout le monde.
Hello Marc thirty-seven.

Klaus a qualifié d’intéressant ton utilitaire ; Jean-Claude a pressenti que papydall va être ravis.
Hé bien, je suis ravi  ( mais sans ESSE !)
Et en tant que tel, je me suis permis d’apporter une légère touche « papydallienne » à ce très bon code.
Rien d’extraordinaire, mais peut-être qu’un Jean-Claude ou un Klauss apprécieront.
1) L’affichage des boutons est en gras (quelle trouvaille !)
2) Le choix se fait soit avec la souris, soit en tapant au clavier le caractère souligné (ça c’est plutôt intéressant).


ça donne ceci:
 

Et voici ma modification : ça concerne la procédure SUB Mask()

Code:

SUB Mask()
    WIDTH 0, 1000
        HEIGHT 0, 710
        LEFT 0,(SCREEN_X-WIDTH(0))/2
        TOP 0,(SCREEN_Y-HEIGHT(0))/2
    BUTTON 1
        LEFT 1,10
        TOP 1,10
        CAPTION 1, "&Open"
    BUTTON 2
        LEFT 2,10
        TOP 2, 634
        CAPTION 2, "&Quit"
    BUTTON 3
        LEFT 3,10
        TOP 3, 594
        CAPTION 3, "&About"
    CREATE_HIDE
    BUTTON 4
        LEFT 4,10
        TOP 4, 554
        CAPTION 4, "&Bigger"
    BUTTON 5
        LEFT 5,10
        TOP 5,514    
        CAPTION 5, "S&maller"  
    FOR i% = 6 to 13
        BUTTON i%
        LEFT i%, 10
        TOP i%, i%*40-120
    NEXT i%
    for i% = 1 to 13 : font_bold i% : next i%
    CAPTION 6, "&Integral"
    CAPTION 7, "&LABEL"
    HINT 7, "Label, Gosub, Return"
    CAPTION 8, "&SUB"
    HINT 8, "Sub, Exit_Sub, End_sub"
    CAPTION 9, "I&F"
    HINT 9, "If, Then, Else, End_if"
    CAPTION 10, "&DIM"
    HINT 10, "Dim, Local_Dim"
    CAPTION 11, "FO&R"
    Hint 11, "For, To, Step, Exit_For, Next"
    CAPTION 12, "&WHILE"
    Hint 12, "While, Exit_While, End_While, Repeat, Exit_Repeat, Until"  
    CAPTION 13, "SELEC&T"
    Hint 13, "Select, Case, End_Select"  
    FOR i%= 20 TO 28
        LIST i%
        LEFT i%, 100
        TOP i%,10
        WIDTH i%, 870
        HEIGHT i%, 650
        FONT_NAME i%,"Courier New"
        FONT_SIZE i%,10
    NEXT i%
    SHOW 20
    TextAbout()
    MessageBox()
END_SUB

Libre à toi de prendre ou de jeter à la corbeille tongue
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Marc

avatar

Nombre de messages : 865
Age : 57
Localisation : TOURS
Date d'inscription : 17/03/2014

MessageSujet: Re: Analyser un code Panoramic   Dim 12 Nov 2017 - 16:37

Bonjour à tous !

Bonjour Papydall !

Le & sur un caption est une astuce que je ne connaissais pas.

C'est bien pratique et très professionnel : mise en gras + soulignement de la lettre choisie et création automatique d'un raccourci clavier, et tout ça, juste avec un petit & savamment placé !

Je prends, j'adopte !

Le code source du premier post et mon Webdav sont mis à jour !

Mercissssss (avec plein de ESSES) Papydall !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 6326
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Analyser un code Panoramic   Dim 12 Nov 2017 - 17:44

Bravo Marc, très utile !

On avait fait un truc similaire autrefois (en 2010, ça ne nous rajeunit pas !) avec l'ami Nardo et la participation active de jjn4 :
http://panoramic.1fr1.net/t1195-analyse-d-un-programme-source-bas?highlight=analyse+code
c'est assez amusant (mais long!) à relire...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Minibug

avatar

Nombre de messages : 3020
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: Re: Analyser un code Panoramic   Dim 12 Nov 2017 - 17:59

Salut Marc !

Super ton code. Je viens de tester...
J'avais déjà utilisé un programme en peu similaire, mais je sais plus qui en était l'auteur...

En coup cas Bravo !  cheers

Edit : j'avais pas remarqué la réponse de JL35 juste au dessus. Et bien voilà la réponse !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
Marc

avatar

Nombre de messages : 865
Age : 57
Localisation : TOURS
Date d'inscription : 17/03/2014

MessageSujet: Re: Analyser un code Panoramic   Dim 12 Nov 2017 - 18:09

Bonsoir à tous !

Merci JL35 et Minibug !

Désolé JL35, je ne savais pas que tu avais déjà fait un tel programme.

Je vais le regarder de ce pas.

Bonne continuation à tous !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 6326
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Analyser un code Panoramic   Dim 12 Nov 2017 - 19:17

C'est vrai qu'il est perdu dans les limbes (2010), et pas à jour des nouveaux mots-clés.
Mais c'est toujours intéressant et instructif de voir le code des autres, et le tien doit être plus 'moderne' que le mien ! Donc aucun problème, programmons, programmons, il en reste toujours quelque chose.
Et bon courage pour ta lecture ! Very Happy
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Analyser un code Panoramic   Dim 12 Nov 2017 - 22:52

Ce programme me semble excellent, et je le place également sur mon bureau, pour accès facile.

Néanmoins, je me permets une petite remarque. Ce programme présente un problème similaire à celui de Panoramic_Editor, dans l'analyse du texte pour identifier les mots-clé. C'est valable pour des mots comme THEN ou ELSE, mais également pour tous les autres mots-clé intéressant le programme. En fait, ces mots-clé sont "reconnus" même s'ils sont dans une chaîne de caractères entre guillemets. Il suffit d'ouvrir le source de ce même programme et de regarder n'importe quel bouton de sélection, piur voir ce queje veux dire.

Le fin du fin, ce serait d'ignorer ces mots-clé s'ils sont entourés de guillemets...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Marc

avatar

Nombre de messages : 865
Age : 57
Localisation : TOURS
Date d'inscription : 17/03/2014

MessageSujet: Re: Analyser un code Panoramic   Lun 13 Nov 2017 - 3:43

Suite à la pertinente remarque de Klaus, j'ai ajouté un "filtre" pour ne plus prendre en compte les mots entourés par des guillemets ainsi que ceux dans les REM.

Je viens de le tester sur plusieurs sources, le filtre semble efficace.

Code:
' ------------------------------------------------------------------------------
'  PANORAMIC FILE ANALYSER
'  MARC37 - November 2017 - Panoramic v0.9.28.i12
'  http://panoramic-language.pagesperso-orange.fr/French/index.html
'  http://panoramic.forumotion.com
' ------------------------------------------------------------------------------
DIM Debug%
Debug% = 0

DIM a$ : ' basic file name to analyze
DIM b$ : ' Reading a line of a$
DIM c$ : ' uppercase of b$
DIM d$ : ' formatted line number as ######
DIM AlreadyExistingLine%
DIM i%, j% : ' variable loop FOR/NEXT
DIM LineLength%
DIM LineNumber%, FontSize%, MemoInUse%
DIM StartingLinePosition%
DIM FirstCaracter%
DIM Character$
DIM Word$
DIM Line$
DIM z$
LABEL Resize, OpenFile, Bigger, Smaller, About, Quit
LABEL Integral, AllLabel, AllSub, AllIf, AllDim, AllForNext, AllWhile, AllSelect
FontSize% = 10
DLIST 50 : ' hidden object => source code to analyze

IF DEBUG% = 1
    FORM 998
    HEIGHT 998, 800
    WIDTH 998, 550
    Command_target_is 998
    LIST 51 : ' hidden object => list of LABEL
    HEIGHT 51, 750
    WIDTH 51, 500
    FONT_NAME 51,"Courier New"
    FONT_SIZE 51,10
    command_target_is 0
    FORM 999
    HEIGHT 999, 800
    WIDTH 999, 550
    TOP 999, 50
    LEFT 999, 50
    Command_target_is 999
    LIST 52 : ' hidden object => Source code without " "
    HEIGHT 52, 750
    WIDTH 52, 500
    FONT_NAME 52,"Courier New"
    FONT_SIZE 52,10
    command_target_is 0
ELSE
    DLIST 51 : ' hidden object => list of LABEL
    DLIST 52 : ' hidden object => Source code without " "
END_IF

Mask()
ON_CLOSE 0, Quit
ON_RESIZE 0, Resize
ON_CLICK 1, OpenFile
ON_CLICK 2, Quit
ON_CLICK 3, About
ON_CLICK 4, Bigger
ON_CLICK 5, Smaller
ON_CLICK 6, Integral
ON_CLICK 7, AllLabel
ON_CLICK 8, AllSub
ON_CLICK 9, AllIf
ON_CLICK 10, AllDim
ON_CLICK 11, AllForNext
ON_CLICK 12, ALLWhile
ON_CLICK 13, AllSelect
END
' ------------------------------------------------------------------------------
OpenFile:
    IF OBJECT_EXISTS(30)=0 THEN OPEN_DIALOG 30
    FILTER 30,"*.bas|*.bas"
    a$=FILE_NAME$(30)
    IF a$="_" THEN RETURN
    CLEAR 50
    CLEAR 51
    CLEAR 52
    FOR i% = 20 TO 27
        CLEAR i%
    NEXT i%   
    FOR i% = 4 TO 13
        HIDE i%
    NEXT i%
    OFF_RESIZE 0
    OFF_CLICK 1
    LineNumber% = 1
    FOR i% = 21 to 28
        HIDE i%
    NEXT i%
    SHOW 20
    waitingMessage()
    FILE_OPEN_READ 30,a$
    CAPTION 0, a$
    WHILE FILE_EOF(30)<>1
        FILE_READLN 30,b$
        d$=STR$(LineNumber%)
        WHILE LEN(d$)<6
            d$=" "+d$
        END_WHILE
        c$=UPPER$(b$)
        QuoteFilter()
        ITEM_ADD 50, b$
        ITEM_ADD 20, d$+" "+b$
        LineNumber% = LineNumber% + 1
    END_WHILE
    FILE_CLOSE 30
    Analysis()
    HIDE 100
RETURN
' ------------------------------------------------------------------------------
SUB QuoteFilter()
    DIM_LOCAL SingleQuote%
    DIM_LOCAL DoubleQuote%
    LineLength% = LEN(c$)
    IF LineLength% = 0
        ITEM_ADD 52,""
        EXIT_SUB
    END_IF
    IF INSTR(c$,"REM ")>0
        IF INSTR(c$,"REM ")=1 OR INSTR(c$," REM ")>0 OR INSTR(c$,":REM ")>0
            c$= LEFT$(b$,INSTR(c$,"REM"))
            ITEM_ADD 52, c$
            EXIT_SUB
        END_IF   
    END_IF
    IF LineLength% > 0
        SingleQuote% = 0
        DoubleQuote% = 0
        Line$=""
        FOR i% = 1 to LineLength%
            Character$=MID$(c$,i%,1)
            IF Character$ = CHR$(39) AND DoubleQuote% = 0
                ITEM_ADD 52, Line$
                EXIT_SUB
            END_IF
            IF Character$ = CHR$(34) THEN DoubleQuote% = DoubleQuote% + 1
            IF DoubleQuote% = 1 THEN Character$ = "x"
            IF DoubleQuote% = 2 THEN DoubleQuote% = 0   
            Line$ = Line$ + Character$
        NEXT i%
        ITEM_ADD 52, Line$
    END_IF   
END_SUB
' ------------------------------------------------------------------------------
SUB Analysis()
    ExtractingLabelNames()
    FOR LineNumber% = 1 to COUNT(50)
        AlreadyExistingLine% = 0
        b$=ITEM_READ$(50,LineNumber%)
        c$=ITEM_READ$(52,LineNumber%)
        LineLength% = LEN(c$)
        d$=STR$(LineNumber%)
        WHILE LEN(d$)<6
            d$=" "+d$
        END_WHILE
        DisplayLabel()
        DisplaySub()
        DisplayIf()
        DisplayDim()
        DisplayFor()
        DisplayWhile()
        DisplaySelect()
    NEXT LineNumber%
    FOR i% = 4 TO 13
        SHOW i%
    NEXT i%
    ON_RESIZE 0, Resize
    ON_CLICK 1, OpenFile
END_SUB
' ------------------------------------------------------------------------------
SUB ExtractingLabelNames()
    FOR LineNumber% = 1 to COUNT(50)
        b$=ITEM_READ$(50,LineNumber%)
        c$=ITEM_READ$(52,LineNumber%)
        IF INSTR(c$,"LABEL ")>0
            IF INSTR(c$,"LABEL ")=1 OR INSTR(c$," LABEL ")>0 OR INSTR(c$,":LABEL ")>0
                StartingLinePosition% = INSTR(c$,"LABEL ")+6
                LineLength%=LEN(b$)
                FirstCaracter% = 1
                Word$ = ""

                FOR j% = StartingLinePosition% TO LineLength%
                    Character$=MID$(b$,j%,1)
       
                    ' eliminating unauthorized characters
                    IF ASC(Character$)< 32 THEN EXIT_FOR
                    IF ASC(Character$)> 32 AND ASC(Character$)<44 THEN EXIT_FOR
                    IF ASC(Character$)> 44 AND ASC(Character$)<48 THEN EXIT_FOR
                    IF ASC(Character$)> 58 AND ASC(Character$)<65 THEN EXIT_FOR
                    IF ASC(Character$)> 90 AND ASC(Character$)<95 THEN EXIT_FOR
                    IF ASC(Character$)> 95 AND ASC(Character$)<97 THEN EXIT_FOR
                    IF ASC(Character$)> 122 THEN EXIT_FOR
 
                    ' removal of forbidden characters as first letter
                    IF FirstCaracter% = 1
                        IF ASC(Character$)=95 THEN EXIT_FOR
                        IF ASC(Character$)>47 AND ASC(Character$)<58 THEN EXIT_FOR
                    END_IF

                    IF ASC(Character$) = 58
                        Word$=Word$+":"
                        ITEM_ADD 51, Word$
                        Word$ = ""
                        EXIT_FOR
                    END_IF
                   
                    IF ASC(Character$)>47
                        FirstCaracter% = 0
                        Word$ = Word$ + Character$
                    END_IF

                    IF j% = LineLength% OR ASC(Character$) = 32 OR ASC(Character$) = 44
                        FirstCaracter% = 1
                        IF ASC(Word$) > 47
                            Word$=Word$+":"
                            ITEM_ADD 51, Word$
                            Word$ = ""
                        END_IF   
                    END_IF   
                NEXT j%
            END_IF   
        END_IF
    NEXT LineNumber%
END_SUB
' ------------------------------------------------------------------------------
SUB DisplayLabel()
        IF INSTR(c$,"LABEL ")>0
            IF INSTR(c$,"LABEL ")=1 OR INSTR(c$," LABEL ")>0 OR INSTR(c$,":LABEL ")>0
                ITEM_ADD 21, d$+" "+b$
                AlreadyExistingLine%=1
            END_IF
        END_IF
        IF AlreadyExistingLine%=0 AND INSTR(c$,"GOSUB ")>0
            IF INSTR(c$,"GOSUB ")=1 OR INSTR(c$," GOSUB ")>0 OR INSTR(c$,":GOSUB ")>0
                ITEM_ADD 21, d$+" "+b$
                AlreadyExistingLine%=1
            END_IF   
        END_IF
        IF AlreadyExistingLine% = 0 and COUNT(51) > 0
            FOR i% = 1 to COUNT(51)
                Word$ = ITEM_READ$(51,i%)
                Word$=UPPER$(Word$)
                IF INSTR(c$,Word$)>0
                    j% = INSTR(c$,Word$)
                    IF INSTR(c$,Word$)=1
                        ITEM_ADD 21,""
                        ITEM_ADD 21, d$+" "+b$
                        AlreadyExistingLine% = 1
                    END_IF
                    IF J%>1
                        IF MID$(b$,1,j%-1)= CHR$(32)
                            ITEM_ADD 21,""
                            ITEM_ADD 21, d$+" "+b$
                            AlreadyExistingLine% = 1
                        END_IF   
                    END_IF   
                END_IF   
            NEXT i%
        END_IF
        IF AlreadyExistingLine%=0 AND INSTR(c$,"RETURN")>0
            IF INSTR(c$,"RETURN ")=1 OR INSTR(c$," RETURN ")>0 OR INSTR(c$,":RETURN ")>0 OR INSTR(c$," RETURN") = (LineLength%-6)OR INSTR(c$,":RETURN") = (LineLength%-6)
                ITEM_ADD 21, d$+" "+b$
                AlreadyExistingLine%=1
            END_IF
        END_IF     
END_SUB
' ------------------------------------------------------------------------------
SUB DisplaySub()
        IF INSTR(c$,"SUB ")>0
            IF INSTR(c$,"SUB ")=1 OR INSTR(c$," SUB ")>0 OR INSTR(c$,":SUB ")>0
                ITEM_ADD 22, d$+" "+b$
                AlreadyExistingLine%=1
            END_IF   
        END_IF
        IF AlreadyExistingLine%=0 AND INSTR(c$,"EXIT_SUB")>0
            IF INSTR(c$,"EXIT_SUB")=1 OR INSTR(c$," EXIT_SUB")>0 OR INSTR(c$,":EXIT_SUB")>0
                ITEM_ADD 22, d$+" "+b$
                AlreadyExistingLine%=1
            END_IF
        END_IF
        IF AlreadyExistingLine%=0 AND INSTR(c$,"END_SUB")>0
            IF INSTR(c$,"END_SUB")=1 OR INSTR(c$," END_SUB")>0 OR INSTR(c$,":END_SUB")>0
                ITEM_ADD 22, d$+" "+b$
                ITEM_ADD 22, ""
                AlreadyExistingLine%=1
            END_IF   
        END_IF
END_SUB
' ------------------------------------------------------------------------------
SUB DisplayIf()
        IF INSTR(c$,"IF ")>0 
            IF INSTR(c$,"IF ")=1 OR INSTR(c$," IF ")>0 OR INSTR(c$,":IF ")>0
                ITEM_ADD 23, d$+" "+b$
                AlreadyExistingLine%=1
            END_IF   
        END_IF
        z$=" THEN "
        IF AlreadyExistingLine%=0
            IF INSTR(c$,z$)>0
                ITEM_ADD 23, d$+" "+b$
                AlreadyExistingLine%=1
            END_IF
        END_IF
        IF AlreadyExistingLine%=0 AND INSTR(c$,"ELSE")>0
            IF INSTR(c$,"ELSE")=1 OR INSTR(c$," ELSE ")>0 OR INSTR(c$,":ELSE:")>0 OR INSTR(c$,":ELSE :")>0 OR INSTR(c$,": ELSE:")>0 OR INSTR(c$," ELSE") = (LineLength%-4)
                ITEM_ADD 23, d$+" "+b$
                AlreadyExistingLine%=1
            END_IF
        END_IF
        IF AlreadyExistingLine%=0 AND INSTR(c$,"END_IF")>0
            IF INSTR(c$,"END_IF")=1 OR INSTR(c$," END_IF")>0 OR INSTR(c$,":END_IF")>0
                ITEM_ADD 23, d$+" "+b$
                ITEM_ADD 23, ""
                AlreadyExistingLine%=1
            END_IF   
        END_IF
END_SUB
' ------------------------------------------------------------------------------
SUB DisplayDim()
        IF INSTR(c$,"DIM ")>0
            IF INSTR(c$,"DIM ")=1 OR INSTR(c$," DIM ")>0 OR INSTR(c$,":DIM ")>0
                ITEM_ADD 24, d$+" "+b$
                AlreadyExistingLine%=1
            END_IF   
        END_IF
        IF INSTR(c$,"LOCAL_DIM ")>0
            IF INSTR(c$,"LOCAL_DIM ")=1 OR INSTR(c$," LOCAL_DIM ")>0 OR INSTR(c$,":LOCAL_DIM ")>0
                ITEM_ADD 24, d$+" "+b$
                AlreadyExistingLine%=1
            END_IF   
        END_IF
END_SUB
' ------------------------------------------------------------------------------
SUB DisplayFor()
        IF INSTR(c$,"FOR ")>0
            IF INSTR(c$,"FOR ")=1 OR INSTR(c$," FOR ")>0 OR INSTR(c$,":FOR ")>0
                ITEM_ADD 25, d$+" "+b$
                AlreadyExistingLine%=1
            END_IF   
        END_IF
        IF AlreadyExistingLine%=0 AND INSTR(c$," TO ")>0 THEN ITEM_ADD 25, d$+" "+b$ : AlreadyExistingLine%=1
        IF AlreadyExistingLine%=0 AND INSTR(c$," STEP ")>0 THEN ITEM_ADD 25, d$+" "+b$ : AlreadyExistingLine%=1
        IF AlreadyExistingLine%=0 AND INSTR(c$,"EXIT_FOR")>0
            IF INSTR(c$,"EXIT_FOR")=1 OR INSTR(c$," EXIT_FOR")>0 OR INSTR(c$,":EXIT_FOR")>0
                ITEM_ADD 25, d$+" "+b$
                AlreadyExistingLine%=1
            END_IF
        END_IF
        IF AlreadyExistingLine%=0 AND INSTR(c$,"NEXT ")>0
            IF INSTR(c$,"NEXT ")=1 OR INSTR(c$," NEXT ")>0 OR INSTR(c$,":NEXT ")>0
                ITEM_ADD 25, d$+" "+b$
                ITEM_ADD 25,""
                AlreadyExistingLine%=1
            END_IF
        END_IF   
END_SUB
' ------------------------------------------------------------------------------
SUB DisplayWhile()
        IF INSTR(c$,"WHILE ")>0
            IF INSTR(c$,"WHILE ")=1 OR INSTR(c$," WHILE ")>0 OR INSTR(c$,":WHILE ")>0
                ITEM_ADD 26, d$+" "+b$
                AlreadyExistingLine%=1
            END_IF   
        END_IF
        IF INSTR(c$,"REPEAT ")>0
            IF INSTR(c$,"REPEAT ")=1 OR INSTR(c$," REPEAT ")>0 OR INSTR(c$,":REPEAT ")>0
                ITEM_ADD 26, d$+" "+b$
                AlreadyExistingLine%=1
            END_IF   
        END_IF
        IF AlreadyExistingLine%=0 AND INSTR(c$,"EXIT_WHILE")>0
            IF INSTR(c$,"EXIT_WHILE")=1 OR INSTR(c$," EXIT_WHILE")>0 OR INSTR(c$,":EXIT_WHILE")>0
                ITEM_ADD 26, d$+" "+b$
                AlreadyExistingLine%=1
            END_IF
        END_IF
        IF AlreadyExistingLine%=0 AND INSTR(c$,"EXIT_REPEAT")>0
            IF INSTR(c$,"EXIT_REPEAT")=1 OR INSTR(c$," EXIT_REPEAT")>0 OR INSTR(c$,":EXIT_REPEAT")>0
                ITEM_ADD 26, d$+" "+b$
                AlreadyExistingLine%=1
            END_IF
        END_IF
        IF AlreadyExistingLine%=0 AND INSTR(c$,"END_WHILE")>0
            IF INSTR(c$,"END_WHILE")=1 OR INSTR(c$," END_WHILE")>0 OR INSTR(c$,":END_WHILE")>0
                ITEM_ADD 26, d$+" "+b$
                AlreadyExistingLine%=1
            END_IF   
        END_IF
        IF AlreadyExistingLine%=0 AND INSTR(c$,"UNTIL")>0
            IF INSTR(c$,"UNTIL")=1 OR INSTR(c$," UNTIL")>0 OR INSTR(c$,":UNTIL")>0
                ITEM_ADD 26, d$+" "+b$
                ITEM_ADD 26, ""
                AlreadyExistingLine%=1
            END_IF   
        END_IF
END_SUB
' ------------------------------------------------------------------------------
SUB DisplaySelect()
        IF INSTR(c$,"SELECT ")>0
            IF INSTR(c$,"SELECT ")=1 OR INSTR(c$," SELECT ")>0 OR INSTR(c$,":SELECT ")>0
                ITEM_ADD 27, d$+" "+b$
                AlreadyExistingLine%=1
            END_IF   
        END_IF
        IF INSTR(c$,"CASE ")>0
            IF INSTR(c$,"CASE ")=1 OR INSTR(c$," CASE ")>0 OR INSTR(c$,":CASE ")>0
                ITEM_ADD 27, d$+" "+b$
                AlreadyExistingLine%=1
            END_IF   
        END_IF
        IF AlreadyExistingLine%=0 AND INSTR(c$,"END_SELECT")>0
            IF INSTR(c$,"END_SELECT")=1 OR INSTR(c$," END_SELECT")>0 OR INSTR(c$,":END_SELECT")>0
                ITEM_ADD 27, d$+" "+b$
                ITEM_ADD 27, ""
                AlreadyExistingLine%=1
            END_IF   
        END_IF
END_SUB
' ------------------------------------------------------------------------------
Integral:
    FOR i%=20 TO 28
        HIDE i%
    NEXT i%
    SHOW 20
    MemoInUse% = 20
RETURN
' ------------------------------------------------------------------------------
AllLabel:
    FOR i%=20 TO 28
        HIDE i%
    NEXT i%
    SHOW 21
    MemoInUse% = 21
RETURN
' ------------------------------------------------------------------------------
AllSub:
    FOR i%=20 TO 28
        HIDE i%
    NEXT i%
    SHOW 22
    MemoInUse% = 22
RETURN
' ------------------------------------------------------------------------------
AllIf:
    FOR i%=20 TO 28
        HIDE i%
    NEXT i%
    SHOW 23
    MemoInUse% = 23
RETURN
' ------------------------------------------------------------------------------
AllDim:
    FOR i%=20 TO 28
        HIDE i%
    NEXT i%
    SHOW 24
    MemoInUse% = 24
RETURN
' ------------------------------------------------------------------------------
AllForNext:
    FOR i%=20 TO 28
        HIDE i%
    NEXT i%
    SHOW 25
    MemoInUse% = 25
RETURN
' ------------------------------------------------------------------------------
AllWhile:
    FOR i%=20 TO 28
        HIDE i%
    NEXT i%
    SHOW 26
    MemoInUse% = 26
RETURN
' ------------------------------------------------------------------------------
AllSelect:
    FOR i%=20 TO 28
        HIDE i%
    NEXT i%
    SHOW 27
    MemoInUse% = 27
RETURN
' ------------------------------------------------------------------------------
About:
    FOR i%=20 TO 28
        HIDE i%
    NEXT i%
    SHOW 28
    MemoInUse% = 28
RETURN
' ------------------------------------------------------------------------------
Resize:
    FOR i% = 20 TO 28
        WIDTH i%, (WIDTH(0)-100)
        HEIGHT i%, (HEIGHT(0)-60)
    NEXT i%
RETURN
' ------------------------------------------------------------------------------
Bigger:
    FontSize%=FontSize% + 1
    IF FontSize% > 16 THEN FontSize% = 16 : RETURN
    FOR i% = 20 TO 28
        FONT_SIZE i%, FontSize%
    NEXT i%
    HIDE MemoInUse% : SHOW MemoInUse%
RETURN
' ------------------------------------------------------------------------------
Smaller:
    FontSize%=FontSize% - 1
    IF FontSize% < 8 THEN FontSize% = 8 : RETURN
    FOR i% = 20 TO 28
        FONT_SIZE i%, FontSize%
    NEXT i%
    HIDE MemoInUse% : SHOW MemoInUse%
RETURN
' ------------------------------------------------------------------------------
SUB Mask()
    WIDTH 0, 1000
        HEIGHT 0, 710
        LEFT 0,(SCREEN_X-WIDTH(0))/2
        TOP 0,(SCREEN_Y-HEIGHT(0))/2
    BUTTON 1
        LEFT 1,10
        TOP 1,10
        CAPTION 1, "&Open"
    BUTTON 2
        LEFT 2,10
        TOP 2, 634
        CAPTION 2, "&Quit"
    BUTTON 3
        LEFT 3,10
        TOP 3, 594
        CAPTION 3, "&About"
    CREATE_HIDE
    BUTTON 4
        LEFT 4,10
        TOP 4, 554
        CAPTION 4, "&Bigger"
    BUTTON 5
        LEFT 5,10
        TOP 5,514   
        CAPTION 5, "S&maller" 
    FOR i% = 6 to 13
        BUTTON i%
        LEFT i%, 10
        TOP i%, i%*40-120
    NEXT i%
    for i% = 1 to 13 : font_bold i% : next i%
    CAPTION 6, "&Integral"
    CAPTION 7, "&LABEL"
    HINT 7, "Label, Gosub, Return"
    CAPTION 8, "&SUB"
    HINT 8, "Sub, Exit_Sub, End_sub"
    CAPTION 9, "I&F"
    HINT 9, "If, Then, Else, End_if"
    CAPTION 10, "&DIM"
    HINT 10, "Dim, Local_Dim"
    CAPTION 11, "FO&R"
    Hint 11, "For, To, Step, Exit_For, Next"
    CAPTION 12, "&WHILE"
    Hint 12, "While, Exit_While, End_While, Repeat, Exit_Repeat, Until" 
    CAPTION 13, "SELEC&T"
    Hint 13, "Select, Case, End_Select" 
    FOR i%= 20 TO 28
        LIST i%
        LEFT i%, 100
        TOP i%,10
        WIDTH i%, 870
        HEIGHT i%, 650
        FONT_NAME i%,"Courier New"
        FONT_SIZE i%,10
    NEXT i%
    SHOW 20
    TextAbout()
    MessageBox()
END_SUB
' ------------------------------------------------------------------------------
SUB MessageBox()
    PANEL 100
        WIDTH 100,300
        HEIGHT 100,200
        FONT_NAME 100,"Arial"
        FONT_SIZE 100,14
    COMMAND_TARGET_IS 100
    ALPHA 101
        TOP 101, 60
        LEFT 101, 100
        CAPTION 101, "Please wait"
    ALPHA 102
        TOP 102, 110
        LEFT 102, 60
        CAPTION 102, "Analysis in progress..."
    COMMAND_TARGET_IS 0
    SHOW 101
    SHOW 102
END_SUB
' ------------------------------------------------------------------------------
SUB WaitingMessage()
    TOP 100, (HEIGHT_CLIENT(0)-200)/2
    LEFT 100, (WIDTH_CLIENT(0)-300)/2
    SHOW 100
END_SUB
' ------------------------------------------------------------------------------
SUB TextAbout()
    ITEM_ADD 28,""
    b$="                      PANORAMIC FILE ANALYSER"
    ITEM_ADD 28, b$
    b$="          MARC37 - November 2017 - Panoramic v0.9.28.i12"
    ITEM_ADD 28, b$
    b$="  http://panoramic-language.pagesperso-orange.fr/French/index.html"
    ITEM_ADD 28, b$
    b$="                http://panoramic.forumotion.com"
    ITEM_ADD 28, b$
END_SUB
' ------------------------------------------------------------------------------
Quit:
    TERMINATE
RETURN




Dernière édition par Marc 37 le Lun 13 Nov 2017 - 15:35, édité 2 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Pedro Alvarez

avatar

Nombre de messages : 1176
Date d'inscription : 19/01/2014

MessageSujet: Analyser un code Panoramic.   Lun 13 Nov 2017 - 9:17

Bonjour.

Je suis en train de tester l'analyseur sur mon programme principal, qui comporte maintenant plus de 50.000 lignes.

La durée du test est rédhibitoire, elle dure plus d'une heure.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Analyser un code Panoramic   Lun 13 Nov 2017 - 10:39

@Pédro:
Citation :
La durée du test est rédhibitoire, elle dure plus d'une heure.
A côté de la durée de l'indexation du dictionnaire...

@Marc37:
Ca a l'air de fonctionner parfaitement. Le résultat est clair et facilement exploitable. Je garde. Merci !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
pascal10000

avatar

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

MessageSujet: Re: Analyser un code Panoramic   Lun 13 Nov 2017 - 11:25

merci Marc
cool ton p'tit programme
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Marc

avatar

Nombre de messages : 865
Age : 57
Localisation : TOURS
Date d'inscription : 17/03/2014

MessageSujet: Re: Analyser un code Panoramic   Lun 13 Nov 2017 - 12:27

Bonjour à tous !

Merci à tous de vos retours.

@Pedro:
50000 lignes ! ! affraid
Un objet LIST peut-il contenir autant de lignes ?
Citation :
La durée du test est rédhibitoire, elle dure plus d'une heure.

Désolé Pedro ! je vais voir s'il est possible d'améliorer la structure du code pour réduire le temps d'analyse.
Tu peux inhiber les analyses que tu ne souhaites pas effectuer en mettant en REM certaines lignes de 161 à 167 :




@JL35
Je suis allé voir et lire toute l'évolution de ton programme de 2010. (je n'étais pas né, je suis arrivé en 2014  Very Happy )
Félicitations !
Effectivement, nous avons deux approches totalement différentes, avec à la fin, des résultats similaires. Mais j'avoue que le tien est bien plus complet.
Voilà qui me donne de nouvelles idées qui risquent de ralentir encore l’exécution de mon programme.... Je réfléchis...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 6326
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Analyser un code Panoramic   Lun 13 Nov 2017 - 12:51

Et moi j'avoue que le mien je ne m'en suis pas servi beaucoup, c'était surtout le plaisir de l'écrire !
Et c'est vrai aussi qu'il y a toujours des améliorations à apporter, c'est ce qui en fait le charme.
Comme disait Boileau:
Hâtez-vous lentement, et, sans perdre courage,
Vingt fois sur le métier remettez votre ouvrage :
Polissez-le sans cesse et le repolissez ;
Ajoutez quelquefois, et souvent effacez. [...]


Je trouve que ça s'applique bien à la programmation Smile

Ceci dit ton programme est très bien fait et sera fort utile.
Une petite remarque personnelle: j'aurais peut-être ajouté les ELSE éventuels entre IF et END_IF ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5642
Age : 64
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Analyser un code Panoramic   Lun 13 Nov 2017 - 13:07

Oui, je trouve aussi que cette citation est bien adaptée aux programmeurs. Very Happy

@Marc37,

Pour la question de durée de mise en place du programme, jusqu'à 5000 lignes je penses que c'est raisonnable de faire le test, au-delà c'est assez long. De plus il m'a semblé (mais je n'ai pas chronométré) que la SUB filter() a ralenti la mise en place.
D'ailleurs le nom de cette SUB me semble critique car c'est un mot-clé de Panoramic, et je pense que ça pourrait être un problème pour compiler le code avec le futur compilateur que Jack essai de concocter.

Pour en revenir à la question de durée de mise en place du programme, le compilateur sera la solution (je crois).

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Analyser un code Panoramic   Lun 13 Nov 2017 - 13:38

Citation :
50000 lignes !
Un objet LIST peut-il contenir autant de lignes ?
Oui, sans problème. Le nombre de lignes dans un DLIST n'est virtuellement pas limité. Au besoin, Windows utilise la pagination pour charger les parties utiles en mémoire en laissant le reste dans le fichier swap, mais c'est totalement transparent pour l'utilisateur et toujours plus rapide que des lectures dans un fichier physique.

Citation :
Con D'ailleurs le nom de cette SUB me semble critique car c'est un mot-clé de Panoramic, et je pense que ça pourrait être un problème pour compiler le code avec le futur compilateur que Jack essai de concocter.
C'est une remarque judicieuse !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Pedro Alvarez

avatar

Nombre de messages : 1176
Date d'inscription : 19/01/2014

MessageSujet: Analyser un code Panoramic.   Lun 13 Nov 2017 - 14:00

Bonjour.

@Marc37.

Loin de moi l'idée de critiquer ton travail.
Je voulais juste signaler la lenteur relative de l'exécution.

Bon courage pour la suite.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 6326
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Analyser un code Panoramic   Lun 13 Nov 2017 - 14:12

@Marc,
Je disais plus haut que ce serait bien d'ajouter les ELSE dans les IF/END_IF, mais je vois que c'est déjà fait.
Malencontreusement j'essayais un programme où le ELSE n'est pas détecté, j'ai extrait la partie en cause:
Code:
WIDTH 0,100
END
' ==============================================================================
SUB Crop(f1$,f2$,x%,y%,w%,h%)
  ' Découper une zone x,y,w,h dans l'image f1$ (JPG ou BMP), sauvegarder
  ' dans f2$ (impérativement BMP), ou dans le clipboard si f2$ = "".
  DIM_LOCAL s2d%,p%,i%
  s2d% = NUMBER_2D_TARGET: ' save
  p%=1000: WHILE OBJECT_EXISTS(p%)=1: p%=p%+1: END_WHILE
  i%=p%+1: WHILE OBJECT_EXISTS(i%)=1: i%=i%+1: END_WHILE
  PICTURE p%: HIDE p%: IMAGE i%
  FILE_LOAD p%,f1$: 2D_TARGET_IS p%: 2D_IMAGE_COPY i%,x%,y%,x%+w%-1,y%+h%-1
  WIDTH p%,w%-1: HEIGHT p%,h%-1
  2D_IMAGE_PASTE i%,0,0
  IF f2$<>""
      FILE_SAVE p%,f2$: ' résultat dans un fichier bmp
  ELSE
      CLIPBOARD_COPY p%: ' résultat dans le clipboard
  END_IF
  2D_TARGET_IS s2d%: ' restore
  DELETE i%: DELETE p%
END_SUB
le ELSE de la ligne 17 n'est pas détecté.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Marc

avatar

Nombre de messages : 865
Age : 57
Localisation : TOURS
Date d'inscription : 17/03/2014

MessageSujet: Re: Analyser un code Panoramic   Lun 13 Nov 2017 - 15:09

Merci JL35 !
Bien vu !
Le code est rectifié ! Il manquait une condition qui est passée à travers tous mes tests.
J'espère qu'il n'y en pas d'autres...
Je recommence quand même une batterie de tests...

@Pedro
Pas de problème Pedro, je ne l'ai pas pris comme un reproche.
Au contraire, c'est une remarque utile qui me pousse à essayer d'optimiser mon code.

@Jean-Claude
Bien vu et très bonne remarque. C'est rectifié : Filter() est devenu QuoteFilter()
Merci !

@Klaus
Merci pour l'explication technique de l'espace mémoire.

A tous : Donc allons-y ! Codons ! Il y a plein de place dans la mémoire !
Et encore MERCI pour tous vos retours !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Analyser un code Panoramic   Lun 13 Nov 2017 - 15:33

La nouvelle version n'est pas encore en ligne, non ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Marc

avatar

Nombre de messages : 865
Age : 57
Localisation : TOURS
Date d'inscription : 17/03/2014

MessageSujet: Re: Analyser un code Panoramic   Lun 13 Nov 2017 - 15:34

@Klaus
Si, en principe tout est à jour, Webdav compris. Je vérifie de suite.

EDIT : mon webdav est bien à jour, le premier post aussi, mais le post de cette nuit à 3h43 n'y était pas. C'est fait ! Merci Klaus !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Analyser un code Panoramic   

Revenir en haut Aller en bas
 
Analyser un code Panoramic
Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant
 Sujets similaires
-
» RESOLU : petit code à tester, trouver l'erreur^^
» J'ai 2 code pour avoir 6 razoirs Shick Induition DÉJÀ DONNÉ
» Vidéos - générateur de code pour vidéo et player
» [Nocturne] Demande d'aide pour code css complet s'il vous plait.
» EDI réalisé entièrement en Panoramic

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