FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Analyse d un programme source  bas - Analyse d'un programme source .bas Emptypar Pedro Aujourd'hui à 10:37

» Un autre pense-bête...
Analyse d un programme source  bas - Analyse d'un programme source .bas Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Analyse d un programme source  bas - Analyse d'un programme source .bas Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Analyse d un programme source  bas - Analyse d'un programme source .bas Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Analyse d un programme source  bas - Analyse d'un programme source .bas Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Analyse d un programme source  bas - Analyse d'un programme source .bas Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Analyse d un programme source  bas - Analyse d'un programme source .bas Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Analyse d un programme source  bas - Analyse d'un programme source .bas Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Analyse d un programme source  bas - Analyse d'un programme source .bas Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Analyse d un programme source  bas - Analyse d'un programme source .bas Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Analyse d un programme source  bas - Analyse d'un programme source .bas Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Analyse d un programme source  bas - Analyse d'un programme source .bas Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Analyse d un programme source  bas - Analyse d'un programme source .bas Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Analyse d un programme source  bas - Analyse d'un programme source .bas Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Analyse d un programme source  bas - Analyse d'un programme source .bas Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le deal à ne pas rater :
LEGO Icons 10331 – Le martin-pêcheur
35 €
Voir le deal

 

 Analyse d'un programme source .bas

Aller en bas 
+3
Nardo26
jjn4
JL35
7 participants
Aller à la page : 1, 2, 3, 4, 5, 6  Suivant
AuteurMessage
JL35




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

Analyse d un programme source  bas - Analyse d'un programme source .bas Empty
MessageSujet: Analyse d'un programme source .bas   Analyse d un programme source  bas - Analyse d'un programme source .bas EmptyDim 31 Oct 2010 - 23:50

Pour visualiser un source, extraire la liste des variables, des labels, des objets et leur utilisation.
Le premier nombre affiché entre crochets est la ligne de déclaration, les autres sont les lignes d'utilisation.
Également la liste des lignes contenant des If, Else, End_If, pour recherche une erreur éventuelle.
Il n'y a pas de mode d'emploi, mais ça me paraît assez intuitif.

Il y a quelques variables à adapter, au début: fm$, fn$, dir$

C'est un peu long (600 lignes...)
Code:
' Analyse d'un programme source Panoramic (.bas)
DIM w0, h0, a$, a1$, b$, c$, v$, sva$, fm$, fn$, f$, fs$, font$, fsz%, fpr%, afl%
DIM i%, j%, k%, k1%, k2%, n%, nl%, u%, ign%, lv%, flf%, fls%, dir$, flsz%, lc%, nc%
DIM objn$(50), var$(100), obj$(100), eti$(80), tob%, nvar%, nobj%, neti%, wf, hf
DIM indt%, car$(20), tca%, p$, s$, marg%, ll%(5000)

LABEL opn, opn1, sav, savs, sauve, impr, quit, chp, cnl, vfont, vlf, new, copy
LABEL paste, cut, Misfo, Listvar, Recvar, Reclab, Receti, Recobj, Recif, Recsou
LABEL Instrs, Mids, der, ra, rb, rc, rd, re, rf, rg, rk, rces, rcvs
LABEL Suit1, Suit2, Suit3, Suit4, Suit41, Suit5, Suit51, Suit6, Suit7, Suit8, Suit9
LABEL Recwhile, Recrep, Recseq, Debug, Ecsva, Supelem, Charsou, Afl, Supquot
' ERROR_FRENCH: ON_ERROR_GOTO Debug
' Noms des objets Panoramic:
DATA "FORM ","BUTTON ","CHECK ","CONTAINER ","DLIST ","LIST ","EDIT ","MEMO "
DATA "OPEN_DIALOG ","TIMER ","PICTURE ","ALPHA ","COMBO ","MOVIE ","GRID "
DATA "OPTION ","SCENE2D ","SCENE3D","SCROLL_BAR ","SOUND ","SPIN ","SPRITE "
DATA "MAIN_MENU ","SUB_MENU "
DATA "#"
tob% = 0: READ a$
WHILE a$ <> "#": tob% = tob% + 1: objn$(tob%) = a$: READ a$ : END_WHILE
' Caractères susceptibles de côtoyer les variables dans le code
' (254 si variable en début de ligne, 255 si variable en fin de ligne)
DATA " ","=",":","+","-","*","/",",",">","<","(",")",";",CHR$(254),CHR$(255)
DATA "#"
tca% = 0: READ a$
WHILE a$ <> "#": tca% = tca% + 1: car$(tca%) = a$: READ a$: END_WHILE

fm$ = "C:\TEMP\fpri.tmp"
fn$ = "C:\TEMP\ftmp.tmp"
dir$ = "C:\LANGAGES\Panoramic": ' répertoire des sources Panoramic

w0 = 800: h0 = 900: h0 = SCREEN_Y-30
WIDTH 0, w0: HEIGHT 0, h0
CAPTION 0, " - ANALYSE D'UN PROGRAMME SOURCE PANORAMIC (.bas) -
afl% = 1: ' affichage implicite des numéros de lignes
marg% = 8

' Menus ---------------------------------------------------------------
MAIN_MENU 1

' Menu principal
SUB_MENU 2: CAPTION 2,"Fichier" : PARENT 2, 1
SUB_MENU 3: CAPTION 3,"Edition" : PARENT 3, 1
SUB_MENU 4: CAPTION 4,"Affichage": PARENT 4, 1
SUB_MENU 5: CAPTION 5,"Recherches": PARENT 5, 1

' Sous-menus 2 (Fichier)
SUB_MENU 21: CAPTION 21,"Nouveau" : PARENT 21, 2
SUB_MENU 22: CAPTION 22,"Ouvrir" : PARENT 22, 2
SUB_MENU 23: CAPTION 23,"Ouvrir dernier enregistré": PARENT 23, 2
SUB_MENU 24: CAPTION 24,"Enregistrer" : PARENT 24, 2
SUB_MENU 25: CAPTION 25,"Enregistrer sous...": PARENT 25, 2
SUB_MENU 26: CAPTION 26,"Imprimer": PARENT 26, 2
SUB_MENU 27: CAPTION 27,"Quitter" : PARENT 27, 2
ON_CLICK 21, new: ON_CLICK 22, opn: ON_CLICK 23, der: ON_CLICK 24, sav
ON_CLICK 25, savs: ON_CLICK 26, impr: ON_CLICK 27, quit

' Sous-menus 3 (Edition)
SUB_MENU 31: CAPTION 31,"Copier" : PARENT 31, 3
SUB_MENU 32: CAPTION 32,"Coller" : PARENT 32, 3
SUB_MENU 33: CAPTION 33,"Couper" : PARENT 33, 3
ON_CLICK 31, copy: ON_CLICK 32, paste: ON_CLICK 33, cut

' Sous-menus 4 (Affichage)
SUB_MENU 41: CAPTION 41,"Police": PARENT 41, 4
SUB_MENU 42: PARENT 42, 4
IF afl% = 0
    CAPTION 42,"Numéros de lignes"
ELSE
    CAPTION 42, "Suppr. N°s de lignes"
END_IF
ON_CLICK 41, chp: ON_CLICK 42, cnl

' Sous-menus 5 (Recherches)
SUB_MENU 51: CAPTION 51,"Variables": PARENT 51, 5
SUB_MENU 52: CAPTION 52,"Labels": PARENT 52, 5
SUB_MENU 53: CAPTION 53,"Objets": PARENT 53, 5
SUB_MENU 54: CAPTION 54,"If...Then...End_If": PARENT 54, 5
SUB_MENU 55: CAPTION 55,"While...End_While": PARENT 55, 5
SUB_MENU 56: CAPTION 56,"Repeat...Until": PARENT 56, 5
SUB_MENU 57: CAPTION 57,"Sous-programmes": PARENT 57, 5
SUB_MENU 58: CAPTION 58,"Séquence...": PARENT 58, 5
ON_CLICK 51, Listvar: ON_CLICK 52, Reclab: ON_CLICK 53, Recobj
ON_CLICK 54, Recif: ON_CLICK 55, Recwhile: ON_CLICK 56, Recrep
ON_CLICK 57, Recsou: ON_CLICK 58, Recseq
' Fin menus -------------------------------------------------------------

FORM 96: TOP 96, 60: LEFT 96, 50: HEIGHT 96, 180: WIDTH 96, 260: HIDE 96
CAPTION 96, "Police/Taille"
LIST 97: PARENT 97, 96: TOP 97, 5: HEIGHT 97, 90: WIDTH 97, 150
FONT_NAMES_LOAD 97: ON_CLICK 97, vfont
SPIN 98: PARENT 98, 96: TOP 98, 5: LEFT 98, 160: WIDTH 98, 60
POSITION 98, 10: MIN 98, 6: MAX 98, 30: ON_CLICK 98, vfont
BUTTON 99: PARENT 99, 96: TOP 99, 60: LEFT 99, 160: WIDTH 99, 80
CAPTION 99, "OK": ON_CLICK 99, vlf
LIST 100: PARENT 100, 96: TOP 100, 100: WIDTH 100, 240: HEIGHT 100, 40
font$ = "Bitstream Vera Sans Mono": fsz% = 10
FONT_NAME 100, font$: FONT_SIZE 100, fsz%
ITEM_ADD 100, font$
ITEM_ADD 100, "Voyez le Brick Géant Que J'examine Près du Wharf"

OPEN_DIALOG 11
FILTER 11,"Sources .bas|*.bas|Textes .txt|*.txt|Tous|*.*"
SAVE_DIALOG 13
FILTER 13,"Sources|*.bas|Textes|*.txt|Tous|*.*"

' Fenêtre principale d'affichage
fpr% = 12
MEMO fpr%: WIDTH fpr%, w0-16: HEIGHT fpr%, h0-56
FONT_NAME fpr%, font$: FONT_SIZE fpr%, fsz%
BAR_BOTH fpr%

' Fenêtre des résultats de recherches
flf% = 78: wf = 500: hf = h0-100
FORM flf%: TOP flf%, 60: LEFT flf%, 200: WIDTH flf%, wf: HEIGHT flf%, hf
HIDE flf%
fls% = flf%+1
LIST fls%: PARENT fls%, flf%
TOP fls%, 0: LEFT fls%, 0: WIDTH fls%, wf-16: HEIGHT fls%, hf-40
COLOR fls%, 255,255,220
flsz% = 10: ' taille caractères
FONT_NAME fls%, "Lucida Console": FONT_SIZE fls%, flsz%: FONT_COLOR fls%,0,0,128
lc% = INT(flsz%/1.25): IF FRAC(flsz%/1.25) >= 5 THEN lc% = lc%+1
nc% = INT(wf-20)/lc% - 4: ' nb de caractères affichables par ligne
END
' --------------------------------------------------------------------
quit:
TERMINATE
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
copy:
CLIPBOARD_COPY fpr%
RETURN
paste:
CLIPBOARD_PASTE fpr%
RETURN
cut:
CLIPBOARD_CUT fpr%
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
new:
CLEAR fpr%
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
opn:
f$ = FILE_NAME$(11): IF f$ = "_" OR f$ = "" THEN RETURN
opn1:
IF afl% = 0
    FILE_LOAD fpr%, f$
ELSE
    FILE_OPEN_READ 1, f$: FILE_OPEN_WRITE 2, fn$: nl% = 0
    WHILE FILE_EOF(1) = 0
        FILE_READLN 1, a$: nl% = nl% + 1
        a$ = STR$(nl%) + ": " + a$
        IF nl% < 1000 THEN a$ = STRING$(4-LEN(STR$(nl%)), " ") + a$
        FILE_WRITELN 2, a$
    END_WHILE
    FILE_CLOSE 1: FILE_CLOSE 2
    FILE_LOAD fpr%, fn$: FILE_DELETE fn$
END_IF
select_text fpr%, 4500, 50
CAPTION 0, f$ + " " + STR$(COUNT(fpr%)) + " lignes."
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
der:
EXECUTE_WAIT "Cmd.exe /C DIR " + dir$ + "\*.bas /O:-D /B >" + fm$
FILE_OPEN_READ 1, fm$
FILE_READLN 1, f$: FILE_CLOSE 1: FILE_DELETE fm$
f$ = dir$ + "" + f$: GOTO opn1
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
sav:
fs$ = f$: GOSUB sauve
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
savs:
IF COUNT(fpr%) = 0 THEN GOSUB Charsou: RETURN
fs$ = FILE_NAME$(13): IF fs$ = "_" OR fs$ = "" THEN RETURN
GOSUB sauve
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
sauve:
IF COUNT(fpr%) = 0 THEN GOSUB Charsou: RETURN
FILE_OPEN_WRITE 1, fs$
FOR i% = 1 TO COUNT(fpr%)
    a$ = ITEM_READ$(fpr%, i%)
    IF afl% = 1
        ' sauvegarde sans les numéros de lignes
        k% = INSTR(a$, ":")
        IF k% <= 5
            IF LEN(a$) > (k%+1)
                a$ = MID$(a$, k%+2, LEN(a$)-k%-1)
            ELSE
                a$ = ""
            END_IF
        END_IF
    END_IF
    FILE_WRITELN 1, a$
NEXT i%
FILE_CLOSE 1
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
impr:
FILE_SAVE fpr%, fm$
EXECUTE_WAIT "write.exe /p " + fm$
FILE_DELETE fm$
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
chp:
SHOW 96
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
cnl:
FILE_OPEN_WRITE 2, fn$
IF afl% = 0
    FOR nl% = 1 TO COUNT(fpr%)
        a$ = ITEM_READ$(fpr%, nl%)
        FILE_WRITELN 2, STRING$(4-LEN(STR$(nl%)), " ") + STR$(nl%) + ": " + a$
    NEXT nl%
    afl% = 1: CAPTION 42, "Suppr. N°s de lignes"
ELSE
    FOR nl% = 1 TO COUNT(fpr%)
        a$ = ITEM_READ$(fpr%, nl%)
        k% = INSTR(a$, ": ")
        IF k%<=5
            IF LEN(a$)>(k%+1)
                a$ = MID$(a$, k%+2, LEN(a$)-k%-1)
            ELSE
                a$ = ""
            END_IF
        END_IF
        FILE_WRITELN 2, a$
    NEXT nl%
    afl% = 0: CAPTION 42, "Numéros de lignes"
END_IF
FILE_CLOSE 2
CLEAR fpr%
FILE_LOAD fpr%, fn$: FILE_DELETE fn$
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
vfont:
CLEAR 100
IF ITEM_INDEX(97) > 0 THEN font$ = ITEM_INDEX$(97)
fsz% = POSITION(98)
FONT_NAME 100, font$: FONT_SIZE 100, fsz%
ITEM_ADD 100, font$
ITEM_ADD 100, "Voyez le Brick Géant Que J'examine Près du Wharf"
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
vlf:
IF ITEM_INDEX(97) > 0 THEN font$ = ITEM_INDEX$(97)
fsz% = POSITION(98)
FONT_NAME fpr%, font$: FONT_SIZE fpr%, fsz%
HIDE 96
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Misfo:
' Mise en forme de a$ avant analyse (élimination des éléments superflus)
ign% = 0
CAPTION flf%, STR$(nl%)+" / "+STR$(COUNT(fpr%))
IF afl% = 1
    k% = INSTR(a$, ":"): IF k% > 0 THEN a$ = MID$(a$, k%+1, LEN(a$))
END_IF
a$ = TRIM$(a$): IF a$ = "" THEN ign% = 1: RETURN
GOSUB Supquot: ' *** Éliminer les contenus éventuels entre quotes
' *** Éliminer les commentaires
IF a$ = "" OR LEFT$(LTRIM$(a$), 1) = CHR$(39) OR LEFT$(UPPER$(LTRIM$(a$)), 3) = "REM"
    ign% = 1: RETURN
END_IF
b$ = UPPER$(a$) + " ": k% = INSTR(b$, "REM ")
k% = INSTR(UPPER$(a$), "REM"): IF k% = 0 THEN k% = INSTR(a$, CHR$(39))
IF k% > 0
    IF MID$(a$, k%-1, 1) = " " OR MID$(a$, k%-1, 1) = ":"
        a$ = RTRIM$(LEFT$(a$, k%-2))
        IF a$ = "" THEN ign% = 1: RETURN
    END_IF
END_IF
IF RIGHT$(a$, 1) = ":" THEN a$ = LEFT$(a$, LEN(a$) - 1)
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Supquot:
' *** Éliminer les contenus entre quotes
k1% = 0: k2% = 0
FOR i% = 1 TO LEN(a$)-2
    IF MID$(a$, i%, 1) = CHR$(34) THEN k1% = i%: EXIT_FOR
NEXT i%
IF k1% > 0
    FOR i% = k1%+1 TO LEN(a$)
        IF MID$(a$, i%, 1) = CHR$(34) THEN k2% = i%: EXIT_FOR
    NEXT i%
    IF k2% > 0 THEN a$ = LEFT$(a$, k1%-1) + MID$(a$, k2%+1, LEN(a$)): GOTO Supquot
    a$ = LEFT$(a$, k1%-1): ' 2ème quote non trouvé
END_IF
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Listvar:
IF COUNT(fpr%) = 0 THEN GOSUB Charsou: RETURN
' ***** VARIABLES DÉCLARÉES (DIM) *****************************************
CLEAR fls%: SHOW flf%: ITEM_ADD fls%, "      ****** LISTE DES VARIABLES ******"
ITEM_ADD fls%, ""
ITEM_ADD fls%, "            un moment svp..."
nvar% = 0
FOR nl% = 1 TO COUNT(fpr%)
    a$ = ITEM_READ$(fpr%, nl%): sva$ = a$
    GOSUB Misfo: IF ign% = 1 THEN GOTO Suit1
ra:
    k% = INSTR(UPPER$(a$), "DIM ")
    IF k% > 0
        a$ = MID$(a$, k%+4, LEN(a$)-k%-3)
        k% = INSTR(a$, ":"): a1$ = ""
        IF k% > 0 THEN a1$ = MID$(a$, k%+1, LEN(a$)-k%): a$ = LEFT$(a$, k%-1)
       
        FOR i% = 1 TO LEN(a$)
            k1% = 0
            IF MID$(a$, i%, 1) = "("
                FOR j% = i%+1 TO LEN(a$)
                    IF MID$(a$, j%, 1) = ")"
                        FOR k% = i%+1 TO j%-1
                            IF MID$(a$, k%, 1) = ","
                                a$ = LEFT$(a$, i%-1)+"["+MID$(a$, i%+1, LEN(a$))
                                a$ = LEFT$(a$, k%-1)+"."+MID$(a$, k%+1, LEN(a$))
                                a$ = LEFT$(a$, j%-1)+"]"+MID$(a$, j%+1, LEN(a$))
                                k1% = 1: EXIT_FOR
                            END_IF
                        NEXT k%
                        EXIT_FOR
                    END_IF
                NEXT j%
            END_IF
        NEXT i%
rb:
        k% = INSTR(a$, ",")
        nvar% = nvar% + 1: b$ = STR$(nl%): b$ = STRING$(5-LEN(b$)," ") + b$
        IF k% > 0
            var$(nvar%) = TRIM$(LEFT$(a$, k%-1)) + b$
            a$ = MID$(a$, k%+1, LEN(a$)-k%): GOTO rb
        END_IF
        var$(nvar%) = TRIM$(a$) + b$
        IF a1$ <> "" THEN a$ = a1$: GOTO ra
    END_IF
Suit1:
NEXT nl%
IF nvar% = 0 THEN GOTO Suit41
' remise en forme des déclarations de tableaux à double entrée
' (remplacement des crochets par des parenthèses et du point par virgule)
FOR i% = 1 TO nvar%
    a$ = var$(i%)
    k% = INSTR(a$, "[")
    IF k% > 0
        a$ = LEFT$(a$, k%-1) + "(" + MID$(a$, k%+1, LEN(a$)-k%)
        k% = INSTR(a$, "]")
        IF k% > 0
            a$ = LEFT$(a$, k%-1) + ")" + MID$(a$, k%+1, LEN(a$)-k%)
            k% = INSTR(a$, ".")
            IF k% > 0 THEN a$ = LEFT$(a$, k%-1) + "," + MID$(a$, k%+1, LEN(a$)-k%)
        END_IF
        b$ = LEFT$(a$, LEN(a$)-5)
        FOR k% = 1 TO LEN(b$): ' suppression éventuelle des espaces superflus
            IF MID$(a$, k%, 1)=" " THEN b$=LEFT$(b$, k%-1) + MID$(b$,k%+1,LEN(b$)-k%)
        NEXT k%
        var$(i%) = b$ + RIGHT$(a$, 5)
    END_IF
NEXT i%
' Tri alphabétique des résultats
DLIST 89: FOR i% = 1 TO nvar%: ITEM_ADD 89, var$(i%): NEXT i%
SORT 89: FOR i% = 1 TO nvar%: var$(i%) = ITEM_READ$(89, i%): NEXT i%
DELETE 89
' ajout des crochets autour des numéros de lignes (ligne de déclaration DIM)
FOR i% = 1 TO nvar%
    var$(i%) = LEFT$(var$(i%), LEN(var$(i%))-5) + " [" + TRIM$(RIGHT$(var$(i%),5)) + "]"
NEXT i%
' *****  RECHERCHE DES VARIABLES DANS LE CODE *******************************
FOR nl% = 1 TO COUNT(fpr%)
    a$ = ITEM_READ$(fpr%, nl%): sva$ = a$
    GOSUB Misfo: IF ign% = 1 THEN GOTO Suit4
    k% = INSTR(UPPER$(a$), "DIM ")
    IF k% = 0 THEN k% = INSTR(UPPER$(a$), "LABEL ")
    IF k% > 0
        ' c'est une ligne de DIM ou de LABEL
        a1$ = "": IF k% > 1 THEN a1$ = LEFT$(a$, k%-1)
        b$ = MID$(a$, k%, LEN(a$)-k%+1)
        k1% = INSTR(b$, ":")
        IF k1% > 0
            a$ = a1$ + MID$(b$, k1%, LEN(b$)-k1%+1)
        ELSE
            a$ = a1$
        END_IF
        IF TRIM$(a$) = "" THEN GOTO Suit4
    END_IF
    k% = INSTR(UPPER$(a$), "LABEL")
    FOR n% = 1 TO nvar%
        v$ = var$(n%): k% = INSTR(v$, " "): v$ = LEFT$(v$, k%-1)
        GOSUB Recvar
        IF ign% = 0 THEN var$(n%) = var$(n%) + "," + STR$(nl%)
    NEXT n%
Suit4:
NEXT nl%
Suit41:
HIDE flf%: CLEAR fls%
ITEM_ADD fls%, "      ****** LISTE DES VARIABLES ("+STR$(nvar%)+") ******"
ITEM_ADD fls%, ""
IF nvar% > 0
    FOR i% = 1 TO nvar%
        a$ = var$(i%): GOSUB Afl
    NEXT i%
END_IF
SHOW flf%
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Recvar:
' Recherche de la variable v$ dans a$
sva$ = a$: ign% = 0
k% = INSTR(v$, "("): ' tableaux
IF k% > 0 THEN v$ = LEFT$(v$, k%)
lv% = LEN(v$)
c$ = CHR$(254)
rf:
k% = INSTR(a$, v$): IF k% < 1 THEN ign% = 1: GOTO rcvs
s$ = CHR$(255)
IF k% > 1 THEN c$ = MID$(a$, k%-1,1): ' caractère précédent (si pas le 1er)
IF k% < (LEN(a$)-lv%+1) THEN s$ = MID$(a$, k%+lv%, 1): ' caractère suivant (si pas le dernier)
j% = 0
FOR i% = 1 TO tca%
    IF c$ = car$(i%) THEN j% = 1: EXIT_FOR
NEXT i%
IF j% = 0 THEN a$ = MID$(a$, k%+1, LEN(a$)): GOTO rf
j% = 0
FOR i% = 1 TO tca%
    IF s$ = car$(i%) THEN j% = 1: EXIT_FOR
NEXT i%
IF RIGHT$(v$, 1) <> "("
    IF j% = 0 THEN c$ = MID$(a$, k%, 1): a$ = MID$(a$, k%+1, LEN(a$)): GOTO rf
END_IF
' trouvé
rcvs:
a$ = sva$
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Afl:
k% = INSTR(a$, " "): b$ = MID$(a$, k%, LEN(a$)): a$ = LEFT$(a$, k%-1)
IF LEN(a$) < marg% THEN a$ = a$ + STRING$(marg%-LEN(a$), " ")
a$ = a$ + b$
rk:
IF LEN(a$) > nc%
    FOR j% = nc%+1 TO 0 STEP -1
        IF MID$(a$, j%, 1) = "," THEN EXIT_FOR
    NEXT j%
    ITEM_ADD fls%, LEFT$(a$, j%)
    a$ = STRING$(marg%+1, " ") + MID$(a$, j%+1, LEN(a$)-j%): GOTO rk
END_IF
ITEM_ADD fls%, a$
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Instrs:
' recherche de b$ dans a$ à partir de u% -> k1%
k1% = 0
IF u% <= LEN(a$)
    c$ = MID$(a$, u%, LEN(a$)-u%+1): k1% = INSTR(c$, b$)
    IF k1% > 0 THEN k1% = k1% + u% - 1
END_IF
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Mids:
' renvoie la chaîne b$, reste de a$ à partir de k% (y compris vide)
b$ = "": IF k% <= LEN(a$) THEN b$ = MID$(a$, k%, LEN(a$)-k%+1)
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Reclab:
IF COUNT(fpr%) = 0 THEN GOSUB Charsou: RETURN
CLEAR fls%: SHOW flf%: ITEM_ADD fls%, "      ****** LISTE DES LABELS ******"
ITEM_ADD fls%, ""
ITEM_ADD fls%, "            un moment svp..."
neti% = 0
' *****  ÉTIQUETTES DÉCLARÉES (LABEL) ***********************************
FOR nl% = 1 TO COUNT(fpr%)
    a$ = ITEM_READ$(fpr%, nl%): sva$ = a$
    GOSUB Misfo: IF ign% = 1 THEN GOTO Suit2
    k% = INSTR(UPPER$(a$), "LABEL ")
    IF k% > 0
        a$ = MID$(a$, k%+6, LEN(a$)-k%-5)
rc:
        k% = INSTR(a$, ":"): a1$ = ""
        IF k% > 0 THEN a1$ = MID$(a$, k%+1, LEN(a$)-k%): a$ = LEFT$(a$, k%-1)
rd:
        k% = INSTR(a$, ",")
        neti% = neti% + 1: b$ = STR$(nl%): b$ = STRING$(5-LEN(b$)," ") + b$
        IF k% > 0
            eti$(neti%) = TRIM$(LEFT$(a$, k%-1)) + b$
            a$ = MID$(a$, k%+1, LEN(a$)-k%): GOTO rd
        END_IF
        eti$(neti%) = TRIM$(a$) + b$
        IF a1$ <> "" THEN a$ = a1$: GOTO rc
    END_IF
Suit2:
NEXT nl%
IF neti% = 0 THEN GOTO Suit51
FOR i% = 1 TO neti%
    eti$(i%) = LEFT$(eti$(i%), LEN(eti$(i%))-5) + " [" + TRIM$(RIGHT$(eti$(i%),5)) + "]"
NEXT i%
' Tri alphabétique du résultat
DLIST 89: FOR i% = 1 TO neti%: ITEM_ADD 89, eti$(i%): NEXT i%
SORT 89: FOR i% = 1 TO neti%: eti$(i%) = ITEM_READ$(89, i%): NEXT i%
DELETE 89
' ***** RECHERCHE DES APPELS AUX LABELS DANS LE CODE ************************
FOR nl% = 1 TO COUNT(fpr%)
    a$ = ITEM_READ$(fpr%, nl%): sva$ = a$
    GOSUB Misfo: IF ign% = 1 THEN GOTO Suit5
    k% = INSTR(UPPER$(a$), "LABEL "): IF k% > 0 THEN GOTO Suit5
    FOR i% = 1 TO neti%
        v$ = eti$(i%): k% = INSTR(v$, " "): v$ = LEFT$(v$, k%-1)
        GOSUB Receti
        IF ign% = 0 THEN eti$(i%) = eti$(i%) + "," + STR$(nl%)
    NEXT i%
Suit5:
NEXT nl%
Suit51:
HIDE flf%
CLEAR fls%: ITEM_ADD fls%, "      ****** LISTE DES LABELS ("+STR$(neti%)+") ******"
ITEM_ADD fls%, ""
IF neti% > 0
    FOR i% = 1 TO neti%
        a$ = eti$(i%): GOSUB Afl
    NEXT i%
END_IF
SHOW flf%
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Receti:
' Recherche de l'étiquette v$ dans a$
sva$ = a$: ign% = 0: lv% = LEN(v$)
k% = INSTR(a$, v$)
IF k% = 1 AND a$ = v$ THEN GOTO rces: ' étiquette en place
IF k% < 6 THEN ign% = 1: GOTO rces
IF MID$(a$, k%-1, 1) <> " " AND MID$(a$, k%-1, 1) <> "," THEN ign% = 1: GOTO rces
IF LEN(a$) < (k% + lv%) THEN GOTO rces
c$ = MID$(a$, k%+lv%, 1)
IF c$ <> ":" AND c$ <> " " THEN ign% = 1: GOTO rces
rces:
a$ = sva$
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Recobj:
IF COUNT(fpr%) = 0 THEN GOSUB Charsou: RETURN
' ***** OBJETS DÉCLARÉS *******************************************
CLEAR fls%: SHOW flf%: ITEM_ADD fls%, "      ****** LISTE DES OBJETS ******"
ITEM_ADD fls%, ""
ITEM_ADD fls%, "            un moment svp..."
nobj% = 0
FOR nl% = 1 TO COUNT(fpr%)
    a$ = ITEM_READ$(fpr%, nl%): sva$ = a$
    GOSUB Misfo: IF ign% = 1 THEN GOTO Suit3
    a$ = UPPER$(a$)
    k% = INSTR(a$, "DATA ")
    IF k% > 0 THEN GOSUB Supelem: IF ign% = 1 THEN GOTO Suit3
    k% = INSTR(a$, "DIM ")
    IF k% > 0 THEN GOSUB Supelem: IF ign% = 1 THEN GOTO Suit3
    k% = INSTR(a$, "LABEL ")
    IF k% > 0 THEN GOSUB Supelem: IF ign% = 1 THEN GOTO Suit3
    FOR i% = 1 TO tob%
        v$ = objn$(i%): lv% = LEN(v$)
        u% = 1
re:
        b$ = v$: GOSUB Instrs: k% = k1%
        IF k% > 0
            IF k% > 1
                n% = ASC(MID$(a$, k%-1, 1))
                IF n%>32 THEN GOTO rg
            END_IF
            u% = k%: b$ = ":": GOSUB Instrs
            IF k1% > 0
                c$ = MID$(a$, k%+lv%, k1%-k%-lv%)
            ELSE
                k% = k% + lv%: GOSUB Mids: c$ = b$
            END_IF
            c$ = TRIM$(c$)
            nobj% = nobj% + 1: obj$(nobj%) = v$ + c$ + " ["+STR$(nl%)+"]"
rg:
            IF k1% > 0 THEN u% = k1%+1: GOTO re
        END_IF
    NEXT i%
Suit3:
NEXT nl%
' Tri du résultat
DLIST 89: FOR i% = 1 TO nobj%: ITEM_ADD 89, obj$(i%): NEXT i%
SORT 89: FOR i% = 1 TO nobj%: obj$(i%) = ITEM_READ$(89, i%): NEXT i%
DELETE 89
HIDE flf%
CLEAR fls%
ITEM_ADD fls%, "      ****** LISTE DES OBJETS ("+STR$(nobj%)+") ******"
ITEM_ADD fls%, ""
FOR i% = 1 TO nobj%: ITEM_ADD fls%, obj$(i%): NEXT i%
SHOW flf%
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Recif:
IF COUNT(fpr%) = 0 THEN GOSUB Charsou: RETURN
CLEAR fls%: SHOW flf%: ITEM_ADD fls%, "      ****** LISTE DES IF...ELSE...END_IF  ******"
ITEM_ADD fls%, "": WAIT 10
indt% = 0: ' indentation
FOR nl% = 1 TO COUNT(fpr%)
    CAPTION flf%, STR$(nl%)+" / "+STR$(COUNT(fpr%))
    a$ = ITEM_READ$(fpr%, nl%): sva$ = a$
    IF afl% = 1
        k% = INSTR(a$, ":"): a$ = MID$(a$, k%+1, LEN(a$)-k%)
    END_IF
    IF LEN(a$) < 4 THEN GOTO Suit6
    a$ = UPPER$(TRIM$(a$)): IF a$ = "" THEN GOTO Suit6
    k% = INSTR(a$, ":")
    IF k% > 0
        k1% = 0
        FOR i% = 1 TO k%-1
            IF MID$(a$, i%, 1) = " " THEN k1% = 1: EXIT_FOR
        NEXT i%
        IF k1% = 0 AND k% = LEN(a$)
            ITEM_ADD fls%, RTRIM$(sva$)+" *****"
            indt% = 0: GOTO Suit6: ' étiquette
        END_IF
    END_IF
    IF LEFT$(a$, 6) = "RETURN" OR LEFT$(a$, 9) = "TERMINATE"
        ITEM_ADD fls%, RTRIM$(sva$)+" "+STRING$(nc%-12, "-")
        indt% = 0: GOTO Suit6
    END_IF
    GOSUB Supquot: ' suppression des expressions entre quotes
    k% = INSTR(a$, CHR$(39)): IF k% = 1 THEN GOTO Suit6
    IF k% > 0 THEN a$ = LEFT$(a$, k%-1): IF TRIM$(a$) = "" THEN GOTO Suit6
    k% = INSTR(a$, "REM"): IF k% = 1 THEN GOTO Suit6
    IF k% > 0 THEN a$ = LEFT$(a$, k%-1): IF TRIM$(a$) = "" THEN GOTO Suit6
    k% = INSTR(a$, "IF ")
    IF k%>0
        IF k% = 1
            GOSUB Ecsva
            k% = INSTR(a$, "THEN "): IF k% < 1 THEN indt% = indt% + 4
            GOTO Suit6
        END_IF
        IF k% > 1 THEN c$ = MID$(a$, k%-1, 1)
        IF c$=" " OR c$<>":"THEN GOSUB Ecsva: GOTO Suit6
    END_IF
    k% = INSTR(a$, "ELSE")
    IF k% = 1 THEN indt%=indt%-4: GOSUB Ecsva: indt% = indt% + 4: GOTO Suit6
    k% = INSTR(a$, "END_IF")
    IF k% = 1 THEN indt% = indt%-4: GOSUB Ecsva
Suit6:
NEXT nl%
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Ecsva:
c$ = "": IF indt% > 0 THEN c$ = STRING$(indt%, " ")
IF afl% = 1
    k% = INSTR(sva$, ":"): c$ = LEFT$(sva$, k%+1)+c$: sva$ = MID$(sva$, k%+2, LEN(sva$))
END_IF
ITEM_ADD fls%, c$ + TRIM$(sva$)
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Recwhile:
IF COUNT(fpr%) = 0 THEN GOSUB Charsou: RETURN
CLEAR fls%: SHOW flf%: ITEM_ADD fls%, "      ****** LISTE DES WHILE...END_WHILE ******"
ITEM_ADD fls%, "": WAIT 10
indt% = 0: ' indentation
FOR nl% = 1 TO COUNT(fpr%)
    a$ = ITEM_READ$(fpr%, nl%): sva$ = a$
    GOSUB Misfo: IF ign% = 1 THEN GOTO Suit7
    a$ = TRIM$(UPPER$(a$))
    k% = INSTR(a$, "WHILE "): k1% = INSTR(a$, "END_WHILE")
    IF k%>0 OR k1%>0 THEN ITEM_ADD fls%, sva$
Suit7:
NEXT nl%
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Recrep:
IF COUNT(fpr%) = 0 THEN GOSUB Charsou: RETURN
CLEAR fls%: SHOW flf%: ITEM_ADD fls%, "      ****** LISTE DES REPEAT...UNTIL ******"
ITEM_ADD fls%, "": WAIT 10
indt% = 0: ' indentation
FOR nl% = 1 TO COUNT(fpr%)
    a$ = ITEM_READ$(fpr%, nl%): sva$ = a$
    GOSUB Misfo: IF ign% = 1 THEN GOTO Suit8
    a$ = TRIM$(UPPER$(a$))
    k% = INSTR(a$, "REPEAT"): k1% = INSTR(a$, "UNTIL ")
    IF k%>0 OR k1%>0 THEN ITEM_ADD fls%, sva$
Suit8:
NEXT nl%
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Supelem:
' suppression d'un élément
ign% = 0
u% = k%+1: b$ = ":": GOSUB Instrs
IF k1% = 0
    a$ = LEFT$(a$, k%-1)
ELSE
    a$ = LEFT$(a$, k%-1) + MID$(a$, k1%+1, LEN(a$))
END_IF
IF a$ = "" THEN ign% = 1
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Recsou:
IF COUNT(fpr%) = 0 THEN GOSUB Charsou: RETURN
CLEAR fls%: SHOW flf%: ITEM_ADD fls%, "    ****** LISTE DES SOUS-PROGRAMMES ET LABELS ******"
ITEM_ADD fls%, ""
FOR nl% = 1 TO COUNT(fpr%)
    CAPTION flf%, STR$(nl%)+" / "+STR$(COUNT(fpr%))
    a$ = ITEM_READ$(fpr%, nl%): sva$ = a$
    IF afl% = 1
        k% = INSTR(a$, ":"): a$ = MID$(a$, k%+1, LEN(a$)-k%)
    END_IF
    IF LEN(a$) < 4 THEN GOTO Suit9
    a$ = UPPER$(TRIM$(a$)): IF a$ = "" THEN GOTO Suit9
    k% = INSTR(a$, ":")
    IF k% > 0
        IF LEN(RTRIM$(a$)) > k% THEN GOTO Suit9
        k1% = 0
        FOR i% = 1 TO k%-1
            IF MID$(a$, i%, 1) = " " THEN k1% = 1: EXIT_FOR
        NEXT i%
        IF k1% = 0
            ITEM_ADD fls%, RTRIM$(sva$)
            GOTO Suit9: ' étiquette
        END_IF
    END_IF
    IF LEFT$(a$, 6) = "RETURN" OR LEFT$(a$, 9) = "TERMINATE"
        ITEM_ADD fls%, RTRIM$(sva$)
        ITEM_ADD fls%, "----------------"
        GOTO Suit9
    END_IF
Suit9:
NEXT nl%
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Recseq:
IF COUNT(fpr%) = 0 THEN GOSUB Charsou: RETURN
s$ = MESSAGE_INPUT$("Recherche séquence","Séquence cherchée:","")
IF s$ = "" THEN RETURN
FOR i% = 1 TO COUNT(fpr%): ll%(i%) = LEN(ITEM_READ$(fpr%, i%))+2: NEXT i%
FOR i% = 1 TO COUNT(fpr%)
    a$ = ITEM_READ$(fpr%, i%)
    k% = INSTR(UPPER$(a$), UPPER$(s$))
    IF k% > 0
        n% = 0
        FOR j% = 1 TO i%-1: n% = n% + ll%(j%): NEXT j%
        ' SELECT_TEXT fpr%, n%+k%, LEN(s$)
        b$ = "- Séquence cherchée: " + chr$(34)+s$ + chr$(34)+" -"+chr$(10)
        b$ = b$ + "============================="+chr$(10)+a$
        b$ = b$ + chr$(10)+ "============================="
        b$ = b$ + chr$(10)+"            - Suivant ? -"
        IF MESSAGE_CONFIRMATION_YES_NO(b$ ) <> 1 THEN RETURN
    END_IF
NEXT i%
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Charsou:
MESSAGE "Pas de programme source à analyser !"
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Debug:
MESSAGE "Erreur ligne: " + str$(error_line)+" " + error_type$
TERMINATE
RETURN
' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-

Dernière édition 28/11 14h45


Dernière édition par JL35 le Dim 28 Nov 2010 - 14:46, édité 23 fois
Revenir en haut Aller en bas
Invité
Invité




Analyse d un programme source  bas - Analyse d'un programme source .bas Empty
MessageSujet: Re: Analyse d'un programme source .bas   Analyse d un programme source  bas - Analyse d'un programme source .bas EmptyLun 1 Nov 2010 - 0:27

Voila un gros travail.
Très bien.
Je vais te donner une astuce, car je vois que tu code le restant d'une chaine comme je le faisais il y a encore deux mois. J'ai vu ça dans ton code:
Code:
b$ = MID$(a$, k%, LEN(a$)-k%+1)

aujourd'hui, je code ainsi, en sachant par exemple qu'une ligne ne va pas plus loin disons de 200, et avec sécurité:
Code:
b$=MID$(a$,k%+1,300)
Il n'y a pas besoin ainsi de faire des calculs pour la fin, tu mets simplement un nombre plus grand, Cela ne provoque pas d'erreur.

J'aurai aimé deux choses pour le programme, vu la lenteur des calculs, est de mettre dans des memos différents les variables et les labels, et de faire une indentation calculée des IF et END_IF, plutôt que de suivre le programme. Cette façon de faire rend inutile le programme que j'ai commencé. On voit tout de suite si il y a une erreur dans la construction des testes.

J'espère ne pas paraître trop grognon en mettant ces remarques.

Je rajoute que pour les IF et END_IF, ce serait bien aussi que tu les séparent des différents sous programmes. Chaque fois que tu vois return, tu tire un trait et tu mets le prochain label
Revenir en haut Aller en bas
jjn4

jjn4


Nombre de messages : 2747
Date d'inscription : 13/09/2009

Analyse d un programme source  bas - Analyse d'un programme source .bas Empty
MessageSujet: +++   Analyse d un programme source  bas - Analyse d'un programme source .bas EmptyLun 1 Nov 2010 - 16:37

Eh, pas mal du tout, ce programme !
Alors voilà ton éditeur de code spécifique,
c'est une belle réalisation !
Ce que j'aime le mieux, ce sont les possibilités de recherche.

Il y a cependant encore pas mal de bugs à corriger :
- par exemple :
lorsqu'on utilise : Ouvrir plus récent (dont je ne comprend pas l'utilité)
cela produit l'erreur : file already used

- J'ai chargé un programme au hasard et ça donne des résultats curieux :
Citation :
****** LISTE DES VARIABLES (14) ******

a$ [4],129,134
d$ [5]
f$ [6]
i [4],56,144,151,157,161
it [7]
j [4],150,156
rem Date de la lecture précédente d'histoire [5],4,5,6,7,8,9
rem Hauteur du tableau [9],4,5,6,7,8,9
rem Indicateur de Taille du tableau [7],4,5,6,7,8,9
rem Nombre de Fois où une histoire a été lue ce jour [6],4,5,6,7,8,9
rem Titre du programme [8],4,5,6,7,8,9
rem Variables provisoires [4],4,5,6,7,8,9
t$ [8]
y [9]
Ce qui est faux, il n'y a que 8 variables, et les rem n'en sont pas.
(le début du programme étant :
Citation :
4: dim a$ , i , j : rem Variables provisoires
5: dim d$ : rem Date de la lecture précédente d`histoire
6: dim f$ : rem Nombre de Fois où une histoire a été lue ce jour
7: dim it : rem Indicateur de Taille du tableau
8: dim t$ : rem Titre du programme
9: dim y : rem Hauteur du tableau

(la détection des labels semble bonne)

- La détection des objets ne marche pas :
il me déclare qu'il y a 0 objet système, ce qui est faux,
en fait, il y en a 8 dans ce programme, 6 avant le end et 2 après.

- La détection des if...else...end_if est plutôt bien,
à la différence que je me demande pourquoi
ça comment par la déclarartion des labels qui n'ont rien à voir.

Ceci dit, bon travail quand même !
Juste un peu de travail de correction en plus pour ce jour férié...
(mais tout le monde sait que la retraite, c'est la galère,
car il n'y a plus de dimanche ni de jours fériés...................
Laughing
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
JL35




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

Analyse d un programme source  bas - Analyse d'un programme source .bas Empty
MessageSujet: Re: Analyse d'un programme source .bas   Analyse d un programme source  bas - Analyse d'un programme source .bas EmptyLun 1 Nov 2010 - 17:13

@cosmos merci pour ton astuce concernant le MID$, à chaque fois je me casse la tête pour calculer la longueur restante, et pour éviter l'erreur si le restant est vide (mon s/p Mids).
Concernant tes remarques sur If End_If, j'ai fait ça vite fait mais je vais étudier ça un peu plus pour que ça serve à quelque chose.

@jjn4 je suis bien conscient qu'il y a des lacunes et je comptais bien sur vous pour me les signaler !
Par exemple j'ai tendance pour les commentaires à tester l'apostrophe et oublier le Rem (dont je ne me sers plus).
- l'Ouvrir plus récent c'est automatiquement le dernier source qui a été enregistré dans le répertoire source, donc en principe celui qui est en cours de mise au point. Ça peut peut-être faire une erreur s'il est déjà lu dans une autre application ? quoique normalement ça ne devrait pas... J'ai remplacé le libellé par 'Ouvrir le dernier enregistré'.
- pour les objets je ne vois pas, ça semble marcher chez moi mais je vais regarder ça de plus près, je n'ai pas fait de tests sur beaucoup de programmes, d'une part, et toujours sur ma façon de coder à moi !

Nonobstant (hein, je cause bien), je vous remercie tous les deux pour vos remarques constructives Very Happy

Edit: Ah cosmos, super ton astuce du Mid$, si j'avais su ça plus tôt depuis le temps que je m'enquiquine avec ça, à calculer la longueur restante, avec + ou - 1, et à éviter l'erreur si la chaîne résultante est vide. Là ça résout tous les problèmes, merci camarade !


Edit2: j'ai fait une petite mise à jour:
- indentation forcée pour les IF/Else/End_if, les lignes de If qui contiennent le Then n'influencent pas l'indentation.
j'ai ajouté l'affichage des labels et return, et je réinitialise l'indentation à chaque s/p.
dis-moi cosmos si ça te convient mieux comme ça.
- ajout de tests pour les REM
Revenir en haut Aller en bas
Invité
Invité




Analyse d un programme source  bas - Analyse d'un programme source .bas Empty
MessageSujet: Re: Analyse d'un programme source .bas   Analyse d un programme source  bas - Analyse d'un programme source .bas EmptyLun 1 Nov 2010 - 19:10

Merci, J'ai pas pensé à le dire plus tôt, car je pensais que vous le saviez avant moi. Il me semble que vous aviez fait un post la dessus, peut-être avec Klaus, mais j'ai pas pu suivre. Tout comme toi, j'en avait marre de calculer. Par contre depuis un moment, je prenais Right$( et non mid$(, vu qu'on prenait le restant de la ligne.

Les programmes du forum, il m'arrive de les essayer mais j'arrive pas à rentrer dedans. J'ai toujours plein de choses à faire, et j'essaye de garder mes programmes en tête, vu que pour l'instant je ne peux rester devant longtemps.

Depuis que j'ai changé d'éditeur, les choses sont déjà plus facile. J'arrive mieux à regarder vos codes sans surcharger l’éditeur Panoramic, qui malheureusement se bloque facilement, et ne permet pas de retirer un onglet.

En ce qui concerne les objets, il me semble effectivement qu'ils ne sont pas tous listés. Mais j'ai pas regardé en profondeur les résultats.

Si tu arrives à faire une indentation des IF et END_IF, sans t'occuper de la présentation du programme tel qu'il est écrit, et si tu remets à zéro le compteur d'indentation à chaque sous programme, on verra tout de suite si il y a une erreur avec la conception des boucles. (un sous programme pour moi ici c'est un label et le code qui va jusqu'au return, en ne tenant pas compte des labels à l'intérieur de ce sous programme). De cette façon, je peux laisser de côté celui que j'ai commencé, et moins lisible, ainsi je peux retourner à autre chose.
Revenir en haut Aller en bas
JL35




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

Analyse d un programme source  bas - Analyse d'un programme source .bas Empty
MessageSujet: Re: Analyse d'un programme source .bas   Analyse d un programme source  bas - Analyse d'un programme source .bas EmptyLun 1 Nov 2010 - 20:37

C'est ce que j'ai fait cosmos, suite à tes suggestions, et le code ci-dessus a été mis à jour.
Pour les objets il faut que je regarde plus en détail, jusqu'ici je n'ai pas eu d'erreur, mais je vais multiplier les exemples.

PS pour les objets, il y avait au moins un problème de majuscules/minuscules, corrigé. Ça devrait maintenant aller beaucoup mieux.
Revenir en haut Aller en bas
Invité
Invité




Analyse d un programme source  bas - Analyse d'un programme source .bas Empty
MessageSujet: Re: Analyse d'un programme source .bas   Analyse d un programme source  bas - Analyse d'un programme source .bas EmptyLun 1 Nov 2010 - 22:36

Ca a l'air de bien marcher. Le seul petit reproche et vraiment une paille, c'est de mettre les numéros de lignes pour la recherche de IF et END_IF pour 4 chiffres, afin de ne pas montrer de décalage de dizaine centaine et millier.
Bon travail, je mets le programme de côté.
A ce propos, pour tester le mien que je viens de mettre, j'ai fais une copie avec "Code:", j'ai cliqué sur l'icône de mon programme, et sans installation, il fonctionne. (c'était la partie que je n'étais pas très sure)
Revenir en haut Aller en bas
JL35




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

Analyse d un programme source  bas - Analyse d'un programme source .bas Empty
MessageSujet: Re: Analyse d'un programme source .bas   Analyse d un programme source  bas - Analyse d'un programme source .bas EmptyLun 1 Nov 2010 - 22:54

Oui, aligner les numéros de lignes j'y avais pensé et je l'ai négligé, mais je vais le faire, ce sera plus propre.

Edit voilà, c'est fait.

Et il va falloir que j'essaye sérieusement ton système de lancement de programmes à tester, qui a l'air bien intéressant.
Mais là... Sleep

Edit du 2/11: nouvelle version éditée avec quelques petites modifs, ajout de la recherche des sous-programmes, correction d'une omission dans la lecture du dernier source enregistré.
Revenir en haut Aller en bas
Invité
Invité




Analyse d un programme source  bas - Analyse d'un programme source .bas Empty
MessageSujet: Re: Analyse d'un programme source .bas   Analyse d un programme source  bas - Analyse d'un programme source .bas EmptyJeu 4 Nov 2010 - 23:56

Je viens d'essayer ton programme pour retrouver une variable dans mon programme, alors que celui-ci fonctionnait (tout du moins pour la partie finie) et maintenant j'ai une erreur en me disant qu'un nom est déjà défini (et que j'ai rajouté)
Seulement je m’aperçois qu'il est loin de toutes les retrouvées.
Ainsi par exemple j'ai dim encre%, ton programme déclare la variable, mais les 45: encre% dont 42 sont entre accolades, il ne les vois pas. Et ce n'est pas la seule!

C'est grave, le cosmos te tombe sur la tête!
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 56
Localisation : Valence
Date d'inscription : 02/07/2010

Analyse d un programme source  bas - Analyse d'un programme source .bas Empty
MessageSujet: Re: Analyse d'un programme source .bas   Analyse d un programme source  bas - Analyse d'un programme source .bas EmptyVen 5 Nov 2010 - 5:09

Bonjour JL35,

Pour améliorer la recherche des objets:
il faut tester si tu n'as pas plusieurs instructions sur la même ligne.
par exemple :
DIM titi% : titi%=1 : LIST titi%


PS: Si tu n'as pas envie de te prendre la tête, tu peux récupérer mon code... Wink
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Invité
Invité




Analyse d un programme source  bas - Analyse d'un programme source .bas Empty
MessageSujet: Re: Analyse d'un programme source .bas   Analyse d un programme source  bas - Analyse d'un programme source .bas EmptyVen 5 Nov 2010 - 9:32

Bonjour,
Il y a quelque chose de bizarre avec Panoramic!

J'ai délaissé quelques jours un programme pour prendre un peu d'espace, et le programme qui fonctionnait sur les commandes qui étaient finies, se bloquait.
Je me suis rappelé que l'erreur que j'avais était la même que celle que j'avais auparavant avec SELECT cas, et il me semble que c'était avec toi Nardo, avant que Jack corrige une erreur sur cette instruction.
Select n'est pas utilisé, et ce n'est pas un problème de variable. Le programme fonctionnait avant, il n'y a pas eus de modification, et j'ai contrôlé celles-ci.

Je repris le programme avec mon programme de déboggage, et pareil, les 2 premières fois, il y a eu blocage.
Et puis voilà qu'ensuite, l'erreur incriminée a disparue. J'ai repris le programme de départ, et maintenant, plus de problème!. On dirais que parfois Panoramic a besoin de "se chauffer". Je sais que le terme est inapproprié. Mais il y a quelque chose de pas bien défini. Mais là, il n'y a que Jack qui peut répondre. Moi je ne fais que de reporter des constatations.

Nouvelle constatation:
Les essais je les ai fait avec l'éditeur Panoramic.
J'essaye de lancer le programme maintenant avec comme dit Nardo, le loader de ma conception, et j'ai de nouveau l'erreur: (35) Name Already Defined Line 6. A noter que l'erreur n'est pas valable sur la ligne, et que ce n'est pas une définition de variable qui est en cause.

J'ai pas envie de remettre sur le devant les déboires, et pour cette raison, je ne fais que rééditer le sujet. J'espère que Jack lira ce poste. Je vais essayer de retrouver la cause, comme j'avais pu le faire pour Select.


Dernière édition par cosmos70 le Ven 5 Nov 2010 - 12:52, édité 1 fois
Revenir en haut Aller en bas
jjn4

jjn4


Nombre de messages : 2747
Date d'inscription : 13/09/2009

Analyse d un programme source  bas - Analyse d'un programme source .bas Empty
MessageSujet: +++   Analyse d un programme source  bas - Analyse d'un programme source .bas EmptyVen 5 Nov 2010 - 12:49

@JL35 : Pas mal, cette fois :
Encore des petites remarques, (histoire de chipoter un peu plus) :

- Les recherches de variables :
Dans mon exemple précédent, cela donne maintenant ceci :
Citation :
****** LISTE DES VARIABLES {8} ******

a$ [4],129,134
d$ [5]
f$ [6]
i [4],56,144,151,157,161
it [7]
j [4],150,156
t$ [8]
y [9]
C'est mieux, mais il y a encore un problème,
pourquoi toutes les utilisations ne sont-elles pas notées :
a$ n'est pas utilisé qu'aux lignes 129 et 134
mais bien plus de fois, il n'y a que les « message a$ », qu'il trouve
et les autres variables comme d$ donnent l'impression de ne pas être utilisées,
ce qui est faux, mais il ne trouve pas où.

- Les if...then ou if...else...end_if :
C'est bon, mais je ne comprends toujours pas pourquoi on y trouve les labels

- Le memo où s'affiche le listing du programme :
avec un bar_vertical, ce serait mieux.

Je sais, je chipote, je chipote......
Laughing
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
Nardo26

Nardo26


Nombre de messages : 2294
Age : 56
Localisation : Valence
Date d'inscription : 02/07/2010

Analyse d un programme source  bas - Analyse d'un programme source .bas Empty
MessageSujet: Re: Analyse d'un programme source .bas   Analyse d un programme source  bas - Analyse d'un programme source .bas EmptyVen 5 Nov 2010 - 13:06

Oui le scroll-bar vertical serait pas mal.
Idem pour la largeur...

@jjn4:
Trouver l'utilisation des variables, est loin d'être évident:
J'ai cherché de mon coté à définir des règles et je m'y suis cassé les dents !
entre les affectations entre variable, les expressions mathématique, les tableaux, les appels de fonctions, ça fait pas mal de cas spéciaux !
...sans compter les variables système qu'il faut filtrer (pas de DIM dans ces cas là)
les cas où on utilise la variable sans avoir vu de DIM de cette variable dans les lignes de code précédentes...
par ex:

gosub InitVariable
a$="toto"
end

InitVariable:
dim a$



@cosmos70:
En cas de plantage il vaut mieux fermer panoramic_editor car j'ai l'impression que panoramic.exe (qui se trouve dans un répertoire temporaire) pose des problèmes lorsque l'on lance des executions par la suite...
ton pb provient peut être de là.... est-ce que tu rencontres parfois le même problème si tu passes par ton 'loader' (exécution d'un chain) ?


Revenir en haut Aller en bas
http://nardo26.lescigales.org
JL35




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

Analyse d un programme source  bas - Analyse d'un programme source .bas Empty
MessageSujet: Re: Analyse d'un programme source .bas   Analyse d un programme source  bas - Analyse d'un programme source .bas EmptyVen 5 Nov 2010 - 13:35

Merci à tous pour vos tests

@jjn4, mais oui bien sûr, il faut chipoter ! ça fait avancer le schmilblick.
- Pour les if/else/end_if, j'ai rajouté les labels et les return suite à une remarque qui m'a semblé justifiée (cosmos ?), en effet quand on attaque ou qu'on quitte un sous-programme il ne doit pas y avoir de structure IF en cours, ça permet peut-être de mieux repérer les ruptures.
- Pour les variables, je fais 2 passes: une première pour les déclarations (DIM), et une deuxième pour les utilisations, ligne par ligne. Apparemment je trouve toutes les déclarations, ce serait intéressant de voir dans quels cas je ne trouve pas les utilisations (structure de la ligne de code incriminée ?).

@Nardo et jjn4, pour les scroll_bar je vais regarder de plus près, a priori je ne sais pas trop les utiliser, mais tout s'apprend !
Revenir en haut Aller en bas
jjn4

jjn4


Nombre de messages : 2747
Date d'inscription : 13/09/2009

Analyse d un programme source  bas - Analyse d'un programme source .bas Empty
MessageSujet: +++   Analyse d un programme source  bas - Analyse d'un programme source .bas EmptyVen 5 Nov 2010 - 13:40

bah, bah, bah, bah...
JL35 est très fort, il va trouver la solution !
Laughing
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
JL35




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

Analyse d un programme source  bas - Analyse d'un programme source .bas Empty
MessageSujet: Re: Analyse d'un programme source .bas   Analyse d un programme source  bas - Analyse d'un programme source .bas EmptyVen 5 Nov 2010 - 13:57

Effectivement, pour les barres de défilement, c'est très simple: il suffit de rajouter:
BAR_BOTH fpr%
à la déclaration du MEMO fpr%, et le tour est joué, merci Panoramic !

Maintenant jjn4, ce serait bien que tu me donnes un exemple d'une ligne où je ne trouve pas une variable donnée...

PS au fait Nardo, merci pour ton offre de récupérer ton code pour les objets, je la garde sous le coude Very Happy

PS2 (rien à voir avec la console): j'ai édité le listing de la page 1, avec ajout des scroll_bar, et amélioration des recherches, suite entre autres aux suggestions de Nardo, tenir compte par exemple des lignes contenant des DIM multiples, des LABEL et des déclarations d'objets, tout ça mélangé (il y en a qui sont vicieux...).
Revenir en haut Aller en bas
Klaus

Klaus


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

Analyse d un programme source  bas - Analyse d'un programme source .bas Empty
MessageSujet: Re: Analyse d'un programme source .bas   Analyse d un programme source  bas - Analyse d'un programme source .bas EmptyVen 5 Nov 2010 - 18:26

@JL35:
Je suis ce programme, avec intérêt. Mais j'ai sursauté à la remarque suivante:
Citation :
- Pour les if/else/end_if, j'ai rajouté les labels et les return suite à une remarque qui m'a semblé justifiée (cosmos ?), en effet quand on attaque ou qu'on quitte un sous-programme il ne doit pas y avoir de structure IF en cours, ça permet peut-être de mieux repérer les ruptures.
Qu'est-ce que tu veux dire par là ? En parcourant le code, ligne par ligne, ou dynamiquement, à l'exécution ? Dans les deux cas, cela peut ressembler à une "bonne pratique" de programation, mais n'est sûrement pas une obligation. Qu'est-ce qui interdirait de programmer ceci, même si je suis d'accord pour dire que c'est "cochonné":
Code:

dim i%
label lab_sub, lab_goto1, lab_goto2


i% = 0

lab_goto2:
if i%>10
    print "limite atteinte"
else
    i% = i% + 1
    gosub lab_sub
    goto lab_goto1
lab_sub:
    print "lab_sub ";i%
    return
lab_goto1:
    print "lab_goto1"
    goto lab_goto2
end_if

print "fin ";i%

end

Ce programme marche. Il est "sale", mal écrit, mais il marche. Et puis, tu parles de structire if...end_if, mais pourquoi pas des structure while...end_while, repeat...until ? Il y a quelque chose que je n'ai pas dû comprendre.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
JL35




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

Analyse d un programme source  bas - Analyse d'un programme source .bas Empty
MessageSujet: Re: Analyse d'un programme source .bas   Analyse d un programme source  bas - Analyse d'un programme source .bas EmptyVen 5 Nov 2010 - 18:43

Si, tu as bien compris Klaus, c'est simplement que je n'ai pas imaginé qu'on pouvait programmer comme ça ! Dans mon esprit le s/p Etiquette/Return est une entité indépendante, mais je t'accorde que ça marche aussi en faisant un peu n'importe quoi.
Le programme est surtout fait au départ dans l'esprit de rechercher une erreur de structure et de vérifier que tout est correct (genre plus de if que de end_if...).

Mais on est d'accord, il n'y a rien d'interdit, mais à mon sens il faut un minimum de rigueur, mais bon, chacun fait comme il lui plait, ce n'est qu'une proposition.

On pourrait effectivement ajouter des contrôles sur les while, repeat etc.

Ce que je me permets, personnellement, c'est d'appeler éventuellement un sous-programme sur une étiquette intermédiaire:
Code:
Gosub toto
...
Gosub tata
...
...
End
toto:
...
tata:
...
Return
Revenir en haut Aller en bas
Klaus

Klaus


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

Analyse d un programme source  bas - Analyse d'un programme source .bas Empty
MessageSujet: Re: Analyse d'un programme source .bas   Analyse d un programme source  bas - Analyse d'un programme source .bas EmptyVen 5 Nov 2010 - 19:54

OK, je comprends mieux ce que tu veux dire. Tu as évidemment raison quant à la structure "correcte" d'un programme, et je milité également pour une rigueur certaine dans l'écriture. Alors, je continue de regarder l'évolution du projet qui me paraît intéressant !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
JL35




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

Analyse d un programme source  bas - Analyse d'un programme source .bas Empty
MessageSujet: Re: Analyse d'un programme source .bas   Analyse d un programme source  bas - Analyse d'un programme source .bas EmptyVen 5 Nov 2010 - 21:08

Et moi je te remercie pour tes remarques intéressantes, comme d'habitude. Comme tu dois bien le penser, mon idée n'est pas du tout de donner des leçons de structuration de programme, simplement pour moi c'est bien plus facile d'intervenir sur un source (même un source à moi) qui n'ait pas des branchements acrobatiques dans tous les sens, même si parfois c'est plus rapide à écrire, mais à terme on n'y gagne pas.

Raison de plus quand c'est un travail d'équipe et qu'il faut intervenir sur le programme d'un autre, parfois dans l'urgence, alors si le programme est tarabiscoté et bordélique (et le programmeur aussi), ça cause parfois des sueurs froides.
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 56
Localisation : Valence
Date d'inscription : 02/07/2010

Analyse d un programme source  bas - Analyse d'un programme source .bas Empty
MessageSujet: Re: Analyse d'un programme source .bas   Analyse d un programme source  bas - Analyse d'un programme source .bas EmptySam 6 Nov 2010 - 0:15

c'est clair qu'il faut un minimum de cohérence dans le prog mais chacun à sa façon d'aborder un problème
-> pour un pb donné , plusieurs solutions possible ! Wink
Je viens de mettre à jour mon prog d'analyse de source sur mon site... (encore une autre facon de faire) Wink
Je pense qu'elle est maintenant complète :
objets + variables + label
quand aux "if et end_if", si on est pas trop bordelique (hors bug pano, bien entendu) cela ne devrait poser pas trop de soucis...
Revenir en haut Aller en bas
http://nardo26.lescigales.org
JL35




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

Analyse d un programme source  bas - Analyse d'un programme source .bas Empty
MessageSujet: Re: Analyse d'un programme source .bas   Analyse d un programme source  bas - Analyse d'un programme source .bas EmptySam 6 Nov 2010 - 13:31

Heureusement qu'il y a en général plusieurs solutions pour un problème donné, sinon ça n'aurait pas de charme !

Pour les if...endif ce n'est pas toujours si évident, il m'est arrivé de faire sauter une ligne par inadvertance, à l'éditeur (une ligne sélectionnée en plus par exemple), et au lancement il te dit "Plus de If que de End_If, mais il ne peut évidemment pas te dire où ça se passe, c'est global, alors si tu as fait d'autres modifs en même temps, tu peux chercher un bon moment. Et pire si tu n'as pas fait d'indentation.
Revenir en haut Aller en bas
jjn4

jjn4


Nombre de messages : 2747
Date d'inscription : 13/09/2009

Analyse d un programme source  bas - Analyse d'un programme source .bas Empty
MessageSujet: +++   Analyse d un programme source  bas - Analyse d'un programme source .bas EmptySam 6 Nov 2010 - 19:02

@JL35 :
je t'envoie des extraits du programme avec lequel je teste le tiens :
Code:
  46: alpha 6
  47: left 6,30 : top 6,275
  48: font_bold 6 : font_size 6,10 : color 6,0,255,0
  49: a$="              Cliquez ici pour                "
  50: a$=a$+chr$(13)+"            agrandir le tableau            "
  51: caption 6,a$
  52: on_click 6,agran

  76: agran:
  77: it=it+1
  78: if it>1 then it=0
  79: if it=1
  80:    y=470 : height 0,y
  ...........

 110: hist:
 111: file_open_read 1,"Adresses.txt"
 112:    file_readln 1,d$
 113:    file_readln 1,f$
 114: file_close 1
 115: if d$<>date$
    .........

 122:  if f$="1"
 123:    file_open_write 1,"Adresses.txt"
 124:      file_writeln 1,d$
 125:      file_writeln 1,2
 126:    file_close 1
 127:    a$="Deux histoires le même jour !"+chr$(13)+"Dites donc, votre moral est"
 128:    a$=a$+chr$(13)+"vraiment bas, aujourd'hui !"
 129:    message a$
 130:    execute "ADR-STORY-07.EXE"
 131:  else
 132:    a$="Trois histoires le même jour !?!"+chr$(13)+"Ce n'est plus de la déprime, ça,"
 133:    a$=a$+chr$(13)+"c'est de la gourmandise."+chr$(13)+"Désolé !"
 134:    message a$
 135:  end_if
(désolé de te faire travailler comme ça..... Laughing )
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
Nardo26

Nardo26


Nombre de messages : 2294
Age : 56
Localisation : Valence
Date d'inscription : 02/07/2010

Analyse d un programme source  bas - Analyse d'un programme source .bas Empty
MessageSujet: Re: Analyse d'un programme source .bas   Analyse d un programme source  bas - Analyse d'un programme source .bas EmptySam 6 Nov 2010 - 20:00

il n'y a qu'a regarder mon prog:
J'ai mis des commentaires aux endroits où j'étais tenter de faire un goto sur un autre else un peu plus loin dans le code...
cela rajoute une étiquette (pour le goto) mais cela ne change pas le fait qu'il faut que tu mettes un end_if (qui ne sert à rien) juste en dessous du goto
Revenir en haut Aller en bas
http://nardo26.lescigales.org
JL35




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

Analyse d un programme source  bas - Analyse d'un programme source .bas Empty
MessageSujet: Re: Analyse d'un programme source .bas   Analyse d un programme source  bas - Analyse d'un programme source .bas EmptySam 6 Nov 2010 - 21:37

@jjn4 j'ai mis une nouvelle version qui je pense améliore beaucoup la recherche des variables...
Tu peux essayer si tu veux bien Wink
Revenir en haut Aller en bas
Contenu sponsorisé





Analyse d un programme source  bas - Analyse d'un programme source .bas Empty
MessageSujet: Re: Analyse d'un programme source .bas   Analyse d un programme source  bas - Analyse d'un programme source .bas Empty

Revenir en haut Aller en bas
 
Analyse d'un programme source .bas
Revenir en haut 
Page 1 sur 6Aller à la page : 1, 2, 3, 4, 5, 6  Suivant
 Sujets similaires
-
» ce fut mon 2ème programme en panoramic! (mauvais programme)
» fermer le programme qui lance un autre programme
» Source "*.bas" écrasé par erreur
» Amelioration du source
» Le source d'un jeu de dames internationnales si ça interesse

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: