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 |
|
|
| Analyser un code Panoramic | |
|
+5JL35 papydall Jean Claude Klaus Marc 9 participants | |
Auteur | Message |
---|
Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: 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.top-forum.net ' ------------------------------------------------------------------------------ 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.top-forum.net" 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 | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: 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. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: 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 ! Je me garde cet utilitaire sous le coude. A+ | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: 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. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: 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 ! 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%27indentationA+ | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: 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 | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: 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 ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Analyser un code Panoramic Dim 12 Nov 2017 - 17:44 | |
| | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: 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 ! Edit : j'avais pas remarqué la réponse de JL35 juste au dessus. Et bien voilà la réponse ! | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: 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 ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: 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 ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: 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... | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: 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.top-forum.net ' ------------------------------------------------------------------------------ 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.top-forum.net" 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 | |
| | | Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: 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. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: 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 ! | |
| | | pascal10000
Nombre de messages : 812 Localisation : Troyes Date d'inscription : 05/02/2011
| Sujet: Re: Analyser un code Panoramic Lun 13 Nov 2017 - 11:25 | |
| merci Marc cool ton p'tit programme | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Analyser un code Panoramic Lun 13 Nov 2017 - 12:27 | |
| Bonjour à tous ! Merci à tous de vos retours. @Pedro: 50000 lignes ! ! 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 ) 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... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: 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 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 ? | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Analyser un code Panoramic Lun 13 Nov 2017 - 13:07 | |
| Oui, je trouve aussi que cette citation est bien adaptée aux programmeurs. @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+ | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: 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 ! | |
| | | Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: 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. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: 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é. | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: 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 ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Analyser un code Panoramic Lun 13 Nov 2017 - 15:33 | |
| La nouvelle version n'est pas encore en ligne, non ? | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: 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 ! | |
| | | Contenu sponsorisé
| Sujet: Re: Analyser un code Panoramic | |
| |
| | | | Analyser un code Panoramic | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |