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.
Énième programme de dump Emptypar Pedro Aujourd'hui à 10:37

» Un autre pense-bête...
Énième programme de dump Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Énième programme de dump Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Énième programme de dump Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Énième programme de dump Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Énième programme de dump Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Énième programme de dump Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Énième programme de dump Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Énième programme de dump Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Énième programme de dump Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Énième programme de dump Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Énième programme de dump Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Énième programme de dump Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Énième programme de dump Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Énième programme de dump 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 du moment :
Smartphone Xiaomi 14 – 512 Go- 6,36″ 5G ...
Voir le deal
599 €

 

 Énième programme de dump

Aller en bas 
5 participants
AuteurMessage
JL35




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

Énième programme de dump Empty
MessageSujet: Énième programme de dump   Énième programme de dump EmptySam 29 Sep 2012 - 21:29

Encore un petit programme de dump fichier en hexa.
Cette fois-ci, pour vous remercier de votre fidélité, j'ai joint dans le paquet une petite calculette en hexa qui pourra être utile pour l'exploration des fichiers:
Code:
LABEL Choixf, Binaire, But, Newad, Calcul, Clical
DIM f$, nbl, nb, v%(5000), a$, b$, c$, d$, h$, ad, sad, ado, sz, i%, j%, k%
DIM lb, p, xd, yd, x, y, lab$(5,3), vi, vl, vp, va$, ope, libel$
DATA "D","E","F","","A","B","C",CHR$(247),"7","8","9","x"
DATA "4","5","6"," -","1","2","3","+","C","0","=",""

HEIGHT 0,700: WIDTH 0,624: FONT_BOLD 0
CAPTION 0, f$: COLOR 0,200,255,255
LIST 1: TOP 1, 30: HEIGHT 1,HEIGHT(0)-70: WIDTH 1,WIDTH(0)-18
FONT_NAME 1,"Lucida Console": FONT_SIZE 1,10: COLOR 1,255,255,200
FONT_BOLD_OFF 1
BUTTON 2: TOP 2,2: LEFT 2,295: WIDTH 2, 30: CAPTION 2,CHR$(235)
BUTTON 3: TOP 3,2: LEFT 3,325: WIDTH 3, 30: CAPTION 3,CHR$(233)
BUTTON 4: TOP 4,2: LEFT 4,355: WIDTH 4, 30: CAPTION 4,CHR$(234)
BUTTON 5: TOP 5,2: LEFT 5,385: WIDTH 5, 30: CAPTION 5,CHR$(238)
FOR i% = 2 TO 5
    FONT_NAME i%,"Wingdings": FONT_SIZE i%,12
    ON_CLICK i%, But
NEXT i%
ALPHA 6: TOP 6,5: LEFT 6, 418: CAPTION 6,"Ads Hex:"
EDIT 7: TOP 7,2: LEFT 7, LEFT(6)+52: WIDTH 7,65: HEIGHT 7,25: COLOR 7,200,200,200
BUTTON 8: TOP 8,2: WIDTH 8,25: LEFT 8,LEFT(7)+67: CAPTION 8,"OK"
ON_CLICK 8, Newad
BUTTON 9: TOP 9,2: WIDTH 9,35: LEFT 9,LEFT(8)+32: CAPTION 9, "Calc"
ON_CLICK 9, Calcul
EDIT 10: TOP 10,2: LEFT 10,5: WIDTH 10,290
FONT_COLOR 10,164,0,0: TEXT 10,"Clic ici pour fichier à dumper"
OPEN_DIALOG 11
ON_CLICK 10, Choixf
' Calculette
lb = 30
FORM 50: TOP 50,200: LEFT 50,150: WIDTH 50,160: HEIGHT 50,290: BORDER_SMALL 50
HIDE 50
LIST 51: PARENT 51,50: TOP 51,0: WIDTH 51,WIDTH(50)-16: HEIGHT 51,25
COLOR 51,200,200,200: FONT_NAME 51,"Lucida Console": FONT_SIZE 51,14
p = 52: yd = 30: xd = 5
FOR y = 0 TO 5
    FOR x = 0 TO 3
        PICTURE p: PARENT p,50: TOP p,yd+(lb+5)*y: LEFT p,xd+(lb+5)*x: WIDTH p,lb: HEIGHT p,lb
        READ lab$(y,x)
        2D_TARGET_IS p
        COLOR p,128,128,128: 2D_FILL_COLOR 128,128,128
        IF x=0 AND y=5
            COLOR p,164,0,0: 2D_FILL_COLOR 164,0,0
        ELSE
            IF x = 3 OR (x=2 AND y=5)
              COLOR p,80,80,80: 2D_FILL_COLOR 80,80,80
            END_IF
        END_IF
        PRINT_TARGET_IS p
        FONT_COLOR p,255,255,255: FONT_SIZE p,18
        FONT_BOLD p: PRINT_LOCATE 7,0: PRINT lab$(y,x)
        ON_CLICK p, Clical
        p = p + 1
    NEXT x
NEXT y
HEIGHT 50,272: CAPTION 50, " CALCULETTE HEXA"
ITEM_ADD 51,"          0"

nbl = INT(HEIGHT(1)/13.15): ' nb de lignes affichées
nb = 16*nbl: ' nb d'octets par page
f$ = ""

END
' ==============================================================================
Choixf:
f$ = FILE_NAME$(11)
IF LEN(f$) >= 4
    FONT_COLOR 10,0,0,0: TEXT 10, f$
    FILEBIN_OPEN_READ 1, f$: sz = FILEBIN_SIZE(1): FILEBIN_CLOSE 1
    CAPTION 0, f$ + " (" + STR$(sz) + " = "+HEX$(sz)+" h octets.)"
    ad = 0
    GOSUB Binaire
END_IF
RETURN
' ------------------------------------------------------------------------------
Binaire:
' lecture de nb caractère à partir de ad
IF f$ <> ""
    HEIGHT 1,HEIGHT(0)-70: nbl = INT(HEIGHT(1)/13.15): nb = 16*nbl
    ad = ad + 15: ad = 16*INT(ad/16)
    TEXT 7,HEX$(ad)
    FILEBIN_OPEN_READ 1, f$
        FILEBIN_POSITION 1, ad
        FILEBIN_BLOCK_READ 1,nb,v%(0)
    FILEBIN_CLOSE 1
    h$ = ""
    FOR i% = 0 TO nb-1
        h$ = h$ + RIGHT$("0"+HEX$(v%(i%)),2)
    NEXT i%
    CLEAR 1
    sad = ad
    FOR j% = 1 TO 2*nb STEP 32
        a$ = RIGHT$("00000"+HEX$(sad),6)+": "
        b$ = MID$(h$, j%, 32): c$ = "  "
        FOR i% = 1 TO LEN(b$) STEP 2
            ado = sad + (i%-1)/2: ' adresse de l'octet
            IF i% = 1+LEN(b$)/2 THEN a$ = a$ + " "
            IF ado >= sz
                d$ = "__": k% = 32
            ELSE
                d$ = MID$(b$, i%, 2): k% = HEX(d$)
            END_IF
            a$ = a$ + " " + d$
            IF k% < 32 THEN k% = 46
            c$ = c$ + CHR$(k%)
        NEXT i%
        ITEM_ADD 1, a$ + c$: sad = sad + 16
        IF sad > sz THEN EXIT_FOR
    NEXT j%
END_IF
RETURN
' ------------------------------------------------------------------------------
But:
IF sad >= nb
    FOR i% = 2 TO 5
        IF CLICKED(i%) = 1 THEN EXIT_FOR
    NEXT i%
    SELECT i%
        CASE 2: ad = 0
        CASE 3: ad = ad - nb: IF ad < 0 THEN ad = 0
        CASE 4: ad = ad + nb: IF ad > (sz-nb) THEN ad = sz-nb
        CASE 5: ad = sz-nb+2
    END_SELECT
    GOSUB Binaire
END_IF
RETURN
' ------------------------------------------------------------------------------
Newad:
IF sad < nb
    TEXT 7,"0"
ELSE
    a$ = TEXT$(7)
    IF a$ <> ""
        ad = HEX(a$): IF ad > (sz-nb) THEN ad = sz-nb
        i% = MOD(ad,16): IF i% > 0 THEN ad = ad-i%: ' début de ligne
        GOSUB Binaire
    END_IF
END_IF
RETURN
' ------------------------------------------------------------------------------
Calcul:
SHOW 50: TO_FOREGROUND 50: ' calculette visible, devant
RETURN
' ------------------------------------------------------------------------------
Clical:
' appui sur une touche de la calculette
FOR i% = 0 TO 23
    IF CLICKED(52+i%) = 1 THEN EXIT_FOR
NEXT i%
y = INT(i%/4): x = i%-y*4
libel$ = lab$(y, x): ' libellé de la touche
va$ = TRIM$(ITEM_READ$(51,1))
vi = HEX(va$)
CLEAR 51
IF x < 3
    IF y < 5 OR x = 1
        ' touche numérique, 0 à F
        vl = HEX(lab$(y,x))
        IF vi = 0
            va$ = lab$(y,x)
        ELSE
            va$ = HEX$(vi*16 + vl)
        END_IF
        ITEM_ADD 51, RIGHT$(STRING$(11," ")+va$, 12)
    ELSE
        IF x = 0
            ITEM_ADD 51, STRING$(11," ")+"0": ' raz (touche clear)
        ELSE
            ' touche '=': effectuer l'opération demandée
            IF ope > 0
                SELECT ope
                    CASE 1: vl = INT(vp/vi)
                    CASE 2: vl = vp*vi
                    CASE 3: vl = vp-vi
                    CASE 4: vl = vp+vi
                END_SELECT
                va$ = HEX$(vl)
                ITEM_ADD 51, RIGHT$(STRING$(11," ")+va$, 12)
                ope = 0
            END_IF
        END_IF
    END_IF
ELSE
    SELECT y
        CASE 0: ' touche non affectée
        CASE 1: ope = 1: ' division
        CASE 2: ope = 2: ' multiplication
        CASE 3: ope = 3: ' soustraction"
        CASE 4: ope = 4: ' addition
        CASE 5: ' touche non affectée
    END_SELECT
    vp = vi
    ITEM_ADD 51, STRING$(11," ")+"0"
END_IF
RETURN
' ------------------------------------------------------------------------------

30/9 correction des cas limites (fichiers < 1 page)


Dernière édition par JL35 le Dim 30 Sep 2012 - 23:38, édité 5 fois
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Énième programme de dump Empty
MessageSujet: Re: Énième programme de dump   Énième programme de dump EmptyDim 30 Sep 2012 - 0:45

J'aime bien la calculatrice Hexa Wink
Revenir en haut Aller en bas
papydall

papydall


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

Énième programme de dump Empty
MessageSujet: Re: Énième programme de dump   Énième programme de dump EmptyDim 30 Sep 2012 - 3:34

Salut JL 35

Un tout petit (je ne dirais pas bug, mais oubli ( ?)).
Bon, lorsque le fichier à « dumper » est court (moins d’une page affichée) les boutons 4 et 5 (flèche en bas, et en bas-droite) provoque l’erreur suivante :
(125) negative value .Line 83

A part ça, je me suis permis (j’espère que tu ne m’en voudras pas) de réécrire le programme en utilisant les SUBs.
Voici ce que ça donne
Code:

' *****************************************************************************
'        DUMB.BAS par JL35
'      Modifié par PAPYDALL
'
' Utilisation des SUB au lieu des LABEL
' Le programme principal se limite à l'unique appel de la procédure principale
' Main(). Celle-ci gère les déclarations des variables et leur initialisation,
' les différents objets et les différents appels aux sous-programmes adéquats.
' Elle déclare seulement 2 LABEL clic et clical:
' Le 1er label (clic) pour gérer les ON_CLICK xx,yy : Ces derniers ne permettent
' pas (actuellement) l'appel à des SUB.
' Le second label (clical) pour l'appel de la calculatrice.
' Normalement, on peut se passer de ce second label en incluant l'appel de la
' calculatrice dans le 1er label.
' Mais je n'y suis pas arrivé !
'
' ******************************************************************************

Main()
end
' ========================== FIN DU PROGRAMME ==================================
' Pour gérer les ON_CLICK
clic:
  but()
  if clicked(8) = 1 then Newad()  : return
  if clicked(9) = 1 then Calcul() : return
  if clicked(10)= 1 then Chf()    : return
return
' -----------------------------------------------------------------------------
' Procédure principale
SUB Main()
  label clic,clical
  DIM f$, nbl, nb, v%(5000), a$, b$, c$, d$, h$, ad, sad, ado, sz, i%, j%, k%
  DIM lb, p, xd, yd, x, y, lab$(5,3), vi, vl, vp, va$, ope, libel$,z%
  DATA "D","E","F","","A","B","C"," /","7","8","9","x"
  DATA "4","5","6"," -","1","2","3","+","C","0","=",""

  HEIGHT 0,700: WIDTH 0,624: FONT_BOLD 0
  CAPTION 0, f$: COLOR 0,200,255,255
  LIST 1: TOP 1, 30: HEIGHT 1,HEIGHT(0)-70: WIDTH 1,WIDTH(0)-18
  FONT_NAME 1,"Lucida Console": FONT_SIZE 1,10: COLOR 1,255,255,200
  FONT_BOLD_OFF 1
  BUTTON 2: TOP 2,2: LEFT 2,295: WIDTH 2, 30: CAPTION 2,CHR$(235)
  BUTTON 3: TOP 3,2: LEFT 3,325: WIDTH 3, 30: CAPTION 3,CHR$(233)
  BUTTON 4: TOP 4,2: LEFT 4,355: WIDTH 4, 30: CAPTION 4,CHR$(234)
  BUTTON 5: TOP 5,2: LEFT 5,385: WIDTH 5, 30: CAPTION 5,CHR$(238)
  FOR i% = 2 TO 5
    FONT_NAME i%,"Wingdings": FONT_SIZE i%,12
    ON_CLICK i%, clic : ' But
  NEXT i%
  ALPHA 6: TOP 6,5: LEFT 6, 418: CAPTION 6,"Ads Hex:"
  EDIT 7: TOP 7,2: LEFT 7, LEFT(6)+52: WIDTH 7,65: HEIGHT 7,25: COLOR 7,200,200,200
  BUTTON 8: TOP 8,2: WIDTH 8,25: LEFT 8,LEFT(7)+67: CAPTION 8,"OK"
  ON_CLICK 8, clic : ' Newad
  BUTTON 9: TOP 9,2: WIDTH 9,35: LEFT 9,LEFT(8)+32: CAPTION 9, "Calc"
  ON_CLICK 9,clic : ' Calcul
  EDIT 10: TOP 10,2: LEFT 10,5: WIDTH 10,290
  FONT_COLOR 10,164,0,0: TEXT 10,"Clic ici pour fichier à dumper"
  OPEN_DIALOG 11
  ON_CLICK 10, clic : ' Chf
' Calculette
  lb = 30
  FORM 50: TOP 50,200: LEFT 50,150: WIDTH 50,160: HEIGHT 50,290: BORDER_SMALL 50
  HIDE 50
  LIST 51: PARENT 51,50: TOP 51,0: WIDTH 51,WIDTH(50)-16: HEIGHT 51,25
  COLOR 51,200,200,200: FONT_NAME 51,"Lucida Console": FONT_SIZE 51,14
  p = 52: yd = 30: xd = 5
  FOR y = 0 TO 5
    FOR x = 0 TO 3
        PICTURE p: PARENT p,50: TOP p,yd+(lb+5)*y: LEFT p,xd+(lb+5)*x: WIDTH p,lb: HEIGHT p,lb
        READ lab$(y,x)
        2D_TARGET_IS p
        COLOR p,128,128,128: 2D_FILL_COLOR 128,128,128
        IF x=0 AND y=5
            COLOR p,164,0,0: 2D_FILL_COLOR 164,0,0
        ELSE
            IF x = 3 OR (x=2 AND y=5)
              COLOR p,80,80,80: 2D_FILL_COLOR 80,80,80
            END_IF
        END_IF
        PRINT_TARGET_IS p
        FONT_COLOR p,255,255,255: FONT_SIZE p,18
        FONT_BOLD p: PRINT_LOCATE 7,0: PRINT lab$(y,x)
        ON_CLICK p,Clical
        p = p + 1
    NEXT x
  NEXT y
  HEIGHT 50,272: CAPTION 50, " CALCULETTE HEXA"
  ITEM_ADD 51,"          0"

  nbl = INT(HEIGHT(1)/13.15): ' nb de lignes affichées
  nb = 16*nbl: ' nb d'octets par page
  f$ = ""

END_SUB
' Fin de la procédure principale
' ==============================================================================
SUB chf()
  if label("exit_chf") = 0 then label exit_chf
  f$ = FILE_NAME$(11)
  IF LEN(f$) < 4 THEN goto exit_chf
  FONT_COLOR 10,0,0,0: TEXT 10, f$
  FILEBIN_OPEN_READ 1, f$: sz = FILEBIN_SIZE(1): FILEBIN_CLOSE 1
  CAPTION 0, f$ + " (" + STR$(sz) + " = "+HEX$(sz)+" h octets.)"
  ad = 0
  Binaire()
  exit_chf:
END_SUB
' ------------------------------------------------------------------------------
SUB Binaire()
  if label("exit_binaire") = 0 then label exit_binaire
' lecture de nb caractère à partir de ad
  IF f$ = "" THEN goto exit_binaire
  HEIGHT 1,HEIGHT(0)-70: nbl = INT(HEIGHT(1)/13.15): nb = 16*nbl
  ad = ad + 15: ad = 16*INT(ad/16)
  TEXT 7,HEX$(ad)
  FILEBIN_OPEN_READ 1, f$
  FILEBIN_POSITION 1, ad
  FILEBIN_BLOCK_READ 1,nb,v%(0)
  FILEBIN_CLOSE 1
  h$ = ""
  FOR i% = 0 TO nb-1
    h$ = h$ + RIGHT$("0"+HEX$(v%(i%)),2)
  NEXT i%
  CLEAR 1
  sad = ad
  FOR j% = 1 TO 2*nb STEP 32
    a$ = RIGHT$("00000"+HEX$(sad),6)+": "
    b$ = MID$(h$, j%, 32): c$ = "  "
    FOR i% = 1 TO LEN(b$) STEP 2
        ado = sad + (i%-1)/2: ' adresse de l'octet
        IF ado >= sz
            a$ = a$ + "  ": c$ = c$ + " "
        ELSE
        d$ = MID$(b$, i%, 2): k% = HEX(d$)
        IF i% = 1+LEN(b$)/2 THEN a$ = a$ + " "
        a$ = a$ + " " + d$
        IF k% < 32 THEN k% = 46
        c$ = c$ + CHR$(k%)
        END_IF
    NEXT i%
    ITEM_ADD 1, a$ + c$: sad = sad + 16
  NEXT j%
  exit_binaire:
END_SUB
' -----------------------------------------------------------------------------
SUB But()
  FOR i% = 2 TO 5
    IF CLICKED(i%) = 1  THEN EXIT_FOR
  NEXT i%
  SELECT i%
    CASE 2: ad = 0
    CASE 3: ad = ad - nb: IF ad < 0 THEN ad = 0
    CASE 4: ad = ad + nb: IF ad > (sz-nb) THEN ad = sz-nb
    CASE 5: ad = sz-nb+2
  END_SELECT
  Binaire()

END_SUB
' ------------------------------------------------------------------------------
SUB Newad()
  if label("exit_newad") = 0 then label exit_newad
  a$ = TEXT$(7): IF a$ = "" THEN goto exit_newad
  ad = HEX(a$): IF ad > (sz-nb) THEN ad = sz-nb
  i% = MOD(ad,16): IF i% > 0 THEN ad = ad-i%: ' début de ligne
  Binaire()
  exit_newad:
END_SUB
' ------------------------------------------------------------------------------
SUB Calcul()
  SHOW 50: TO_FOREGROUND 50
END_SUB
' ------------------------------------------------------------------------------
' appui sur une touche de la calculette
clical:

  FOR i% = 0 TO 23
    IF CLICKED(52+i%) = 1 THEN EXIT_FOR
  NEXT i%
  y = INT(i%/4): x = i%-y*4
  libel$ = lab$(y, x): ' libellé de la touche
  va$ = TRIM$(ITEM_READ$(51,1))
  vi = HEX(va$)
  CLEAR 51
  IF x < 3
    ' touche numérique
    IF y < 5 OR x = 1
        vl = HEX(lab$(y,x))
        IF vi = 0
            va$ = lab$(y,x)
        ELSE
            va$ = HEX$(vi*16 + vl)
        END_IF
        ITEM_ADD 51, RIGHT$(STRING$(11," ")+va$, 12)
    ELSE
        IF x = 0
            ' clear
            ITEM_ADD 51, STRING$(11," ")+"0"
        ELSE
            ' touche '='
            IF ope > 0
                SELECT ope
                    CASE 1: vl = INT(vp/vi)
                    CASE 2: vl = vp*vi
                    CASE 3: vl = vp-vi
                    CASE 4: vl = vp+vi
                END_SELECT
                va$ = HEX$(vl)
                ITEM_ADD 51, RIGHT$(STRING$(11," ")+va$, 12)
                ope = 0
            END_IF
        END_IF
    END_IF
ELSE
    SELECT y
        CASE 0
        CASE 1: ope = 1: ' division
        CASE 2: ope = 2: ' multiplication
        CASE 3: ope = 3: ' soustraction"
        CASE 4: ope = 4: ' addition
        CASE 5
    END_SELECT
    vp = vi
    ITEM_ADD 51, STRING$(11," ")+"0"
END_IF
return

' -------------- FIN ----------------------
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
JL35




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

Énième programme de dump Empty
MessageSujet: Re: Énième programme de dump   Énième programme de dump EmptyDim 30 Sep 2012 - 14:05

Bravo papydall ! effectivement je n'avais pas envisagé le cas d'un fichier plus petit que la fenêtre ! et puis tu as bien modernisé le tout avec les SUB, c'est mieux.
C'est là qu'on voit aussi que l'Exit_Sub serait bien pratique, plutôt que des branchements sur étiquettes...
Revenir en haut Aller en bas
JL35




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

Énième programme de dump Empty
MessageSujet: Re: Énième programme de dump   Énième programme de dump EmptyDim 30 Sep 2012 - 14:54

@papydall
à ce propos, j'observe une chose que je ne m'explique pas avec ta version, tu veux bien faire l'expérience suivante ?:
lister un fichier assez long dans le programme, te positionner sur la fin (clic sur la flèche bas à droite) -> affichage de l'adresse du début de la page dans l'Edit 7, par exemple chez moi '28AFB0', jusqu'ici tout est normal.
Je saisis '0' dans Adr Hex (Edit 7), qui est bien affiché ainsi, puis je clique 'OK', -> SUB Newad, et là, dans a$ = TEXT$(7) je récupère la valeur initiale: '28AFB0' scratch
On dirait qu'il n'a pas pris en compte la modif de l'Edit...
Une fantaisie des 'SUB' ?
(ps je n'ai pas cette anomalie dans ma version initiale).

D'ailleurs je confirme que quelle que soit l'adresse que l'on saisit dans 'Adr Hex' ça ne marche pas, le sub Newad repart avec l'adresse précédente, la saisie manuelle dans l'Edit 7 n'est pas prise en compte (et pourtant bien affichée au moment de la saisie).

Finalement j'ai corrigé les cas limites (petits fichiers) dans ma version en haut, mais je n'ai pas intégré les SUB (je suis resté en Gosub).
Revenir en haut Aller en bas
Nardo26

Nardo26


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

Énième programme de dump Empty
MessageSujet: Re: Énième programme de dump   Énième programme de dump EmptyDim 30 Sep 2012 - 20:09

JL35 a écrit:
Bravo papydall ! effectivement je n'avais pas envisagé le cas d'un fichier plus petit que la fenêtre ! et puis tu as bien modernisé le tout avec les SUB, c'est mieux.
C'est là qu'on voit aussi que l'Exit_Sub serait bien pratique, plutôt que des branchements sur étiquettes...
Oui mais certaine etiquettes peuvent être évitées:
Code:
SUB Newad()
  a$ = TEXT$(7)
  IF a$<>""
    ad = HEX(a$): IF ad > (sz-nb) THEN ad = sz-nb
    i% = MOD(ad,16): IF i% > 0 THEN ad = ad-i%: ' début de ligne
    Binaire()
  END_IF
END_SUB
...
SUB chf()
  f$ = FILE_NAME$(11)
  IF LEN(f$) >= 4
    FONT_COLOR 10,0,0,0: TEXT 10, f$
    FILEBIN_OPEN_READ 1, f$: sz = FILEBIN_SIZE(1): FILEBIN_CLOSE 1
    CAPTION 0, f$ + " (" + STR$(sz) + " = "+HEX$(sz)+" h octets.)"
    ad = 0
    Binaire()
  END_IF
END_SUB


En fait tous les labels exit_### peuvent être évités.
Même le label dans Binaire() si on fait le test de f$ avant l'appel à la procedure...

Je viens de saisir une valeur dans le champs Ads Hex puis j'ai cliqué sur Ok et il ne se passe rien...
normalement cela doit faire quoi ?...
Revenir en haut Aller en bas
http://nardo26.lescigales.org
JL35




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

Énième programme de dump Empty
MessageSujet: Re: Énième programme de dump   Énième programme de dump EmptyDim 30 Sep 2012 - 22:21

Bonsoir Nardo,
eh bien regarde ma réponse ci-dessus, il y a effectivement un os dans la version de papydall sur ce coup-là (que je ne m'explique pas d'ailleurs), c'est pourquoi je ne l'ai pas validée.
Normalement à la saisie d'une adresse dans la zone Adr Hex, puis 'OK' le fichier doit s'afficher à partir de l'adresse multiple de 16 inférieure, comme dans ma version à moi.

Et tu as raison pour les étiquettes, c'est plus élégant comme tu as fait.

J'ai trouvé pour le bug de la version de papydall: le clic sur 'OK' n'envoie pas directement dans le SUB Newad comme il devrait, mais passe par le s/p 'clic' qui écrase la valeur entrée dans l'Edit par la valeur précédente (appel au sub But) !! donc c'est pas bon, il faudrait revoir l'architecture (mais pas moi).
Pour l'instant j'en reste à la version d'origine.
Revenir en haut Aller en bas
Nardo26

Nardo26


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

Énième programme de dump Empty
MessageSujet: Re: Énième programme de dump   Énième programme de dump EmptyDim 30 Sep 2012 - 23:05

Bon j'ai corrigé sommairement sans trop cassé ce qui avait été fait, la version PapyDall...
Code:


' *****************************************************************************
'        DUMB.BAS par JL35
'      Modifié par PAPYDALL
'      Remodifié par Nardo
' Utilisation des SUB au lieu des LABEL
' Le programme principal se limite à l'unique appel de la procédure principale
' Main(). Celle-ci gère les déclarations des variables et leur initialisation,
' les différents objets et les différents appels aux sous-programmes adéquats.
'
' ******************************************************************************

Main()
end
' ========================== FIN DU PROGRAMME ==================================
' Pour gérer les ON_CLICK
TraiteBouton:

  SELECT NUMBER_CLICK
    CASE 2 : ad=0  : ' retour en debut de fichier
    CASE 3 : ad = ad - nb: IF ad < 0 THEN ad = 0  : ' page = page - 1
    CASE 4 : ad = ad + nb: IF ad > (sz-nb) THEN ad = sz-nb
    CASE 5 : ad = sz-nb+2
    CASE 8 : NewAd() : ' reglage de l'offset a partir du champs de saisie
    CASE 9 : Calcul()
    CASE 10: Chf() : ' Chargement du fichier (pas très parlant comme nom de procedure) ;)
  END_SELECT
  IF (NUMBER_CLICK <> 9) AND f$<>"" THEN Binaire()
return


' -----------------------------------------------------------------------------
' Procédure principale
SUB Main()
  label TraiteBouton,clical
  DIM f$, nbl, nb, v%(5000), a$, b$, c$, d$, h$, ad, sad, ado, sz, i%, j%, k%
  DIM lb, p, xd, yd, x, y, lab$(5,3), vi, vl, vp, va$, ope, libel$,z%
  DATA "D","E","F","","A","B","C"," /","7","8","9","x"
  DATA "4","5","6"," -","1","2","3","+","C","0","=",""

  HEIGHT 0,700: WIDTH 0,624: FONT_BOLD 0
  CAPTION 0, f$: COLOR 0,200,255,255
  LIST 1: TOP 1, 30: HEIGHT 1,HEIGHT(0)-70: WIDTH 1,WIDTH(0)-18
  FONT_NAME 1,"Lucida Console": FONT_SIZE 1,10: COLOR 1,255,255,200
  FONT_BOLD_OFF 1
  BUTTON 2: TOP 2,2: LEFT 2,295: WIDTH 2, 30: CAPTION 2,CHR$(235)
  BUTTON 3: TOP 3,2: LEFT 3,325: WIDTH 3, 30: CAPTION 3,CHR$(233)
  BUTTON 4: TOP 4,2: LEFT 4,355: WIDTH 4, 30: CAPTION 4,CHR$(234)
  BUTTON 5: TOP 5,2: LEFT 5,385: WIDTH 5, 30: CAPTION 5,CHR$(238)
  FOR i% = 2 TO 5
    FONT_NAME i%,"Wingdings": FONT_SIZE i%,12
    ON_CLICK i%, TraiteBouton : ' But
  NEXT i%

  ALPHA 6: TOP 6,5: LEFT 6, 418: CAPTION 6,"Ads Hex:"
  EDIT 7: TOP 7,2: LEFT 7, LEFT(6)+52: WIDTH 7,65: HEIGHT 7,25: COLOR 7,200,200,200

  BUTTON 8: TOP 8,2: WIDTH 8,25: LEFT 8,LEFT(7)+67: CAPTION 8,"OK"
  ON_CLICK 8, TraiteBouton : ' Newad

  BUTTON 9: TOP 9,2: WIDTH 9,35: LEFT 9,LEFT(8)+32: CAPTION 9, "Calc"
  ON_CLICK 9,TraiteBouton : ' Calcul
 
  EDIT 10: TOP 10,2: LEFT 10,5: WIDTH 10,290
  FONT_COLOR 10,164,0,0: TEXT 10,"Clic ici pour fichier à dumper"
  OPEN_DIALOG 11
  ON_CLICK 10, TraiteBouton : ' Chf

' Calculette
  lb = 30
  FORM 50: TOP 50,200: LEFT 50,150: WIDTH 50,160: HEIGHT 50,290: BORDER_SMALL 50
  HIDE 50
  LIST 51: PARENT 51,50: TOP 51,0: WIDTH 51,WIDTH(50)-16: HEIGHT 51,25
  COLOR 51,200,200,200: FONT_NAME 51,"Lucida Console": FONT_SIZE 51,14
  p = 52: yd = 30: xd = 5
  FOR y = 0 TO 5
    FOR x = 0 TO 3
        PICTURE p: PARENT p,50: TOP p,yd+(lb+5)*y: LEFT p,xd+(lb+5)*x: WIDTH p,lb: HEIGHT p,lb
        READ lab$(y,x)
        2D_TARGET_IS p
        COLOR p,128,128,128: 2D_FILL_COLOR 128,128,128
        IF x=0 AND y=5
            COLOR p,164,0,0: 2D_FILL_COLOR 164,0,0
        ELSE
            IF x = 3 OR (x=2 AND y=5)
              COLOR p,80,80,80: 2D_FILL_COLOR 80,80,80
            END_IF
        END_IF
        PRINT_TARGET_IS p
        FONT_COLOR p,255,255,255: FONT_SIZE p,18
        FONT_BOLD p: PRINT_LOCATE 7,0: PRINT lab$(y,x)
        ON_CLICK p,Clical
        p = p + 1
    NEXT x
  NEXT y
  HEIGHT 50,272: CAPTION 50, " CALCULETTE HEXA"
  ITEM_ADD 51,"          0"

  nbl = INT(HEIGHT(1)/13.15): ' nb de lignes affichées
  nb = 16*nbl: ' nb d'octets par page
  f$ = ""

END_SUB
' Fin de la procédure principale
' ==============================================================================
SUB chf()
  f$ = FILE_NAME$(11)
  IF LEN(f$) >= 4
    FONT_COLOR 10,0,0,0: TEXT 10, f$
    FILEBIN_OPEN_READ 1, f$: sz = FILEBIN_SIZE(1): FILEBIN_CLOSE 1
    CAPTION 0, f$ + " (" + STR$(sz) + " = "+HEX$(sz)+" h octets.)"
    ad = 0
  ELSE
    f$=""
  END_IF
END_SUB
' ------------------------------------------------------------------------------
SUB Newad()
  IF TEXT$(7)<>""
    ad = HEX(TEXT$(7)): IF ad > (sz-nb) THEN ad = sz-nb
    i% = MOD(ad,16): IF i% > 0 THEN ad = ad-i%: ' début de ligne
  END_IF
END_SUB
' ------------------------------------------------------------------------------
SUB Binaire()
' lecture de nb caractère à partir de ad
  HEIGHT 1,HEIGHT(0)-70: nbl = INT(HEIGHT(1)/13.15): nb = 16*nbl
  ad = ad + 15: ad = 16*INT(ad/16)
  TEXT 7,HEX$(ad)
  FILEBIN_OPEN_READ 1, f$
  FILEBIN_POSITION 1, ad
  FILEBIN_BLOCK_READ 1,nb,v%(0)
  FILEBIN_CLOSE 1
  h$ = ""
  FOR i% = 0 TO nb-1
    h$ = h$ + RIGHT$("0"+HEX$(v%(i%)),2)
  NEXT i%
  CLEAR 1
  sad = ad
  FOR j% = 1 TO 2*nb STEP 32
    a$ = RIGHT$("00000"+HEX$(sad),6)+": "
    b$ = MID$(h$, j%, 32): c$ = "  "
    FOR i% = 1 TO LEN(b$) STEP 2
        ado = sad + (i%-1)/2: ' adresse de l'octet
        IF ado >= sz
            a$ = a$ + "  ": c$ = c$ + " "
        ELSE
        d$ = MID$(b$, i%, 2): k% = HEX(d$)
        IF i% = 1+LEN(b$)/2 THEN a$ = a$ + " "
        a$ = a$ + " " + d$
        IF k% < 32 THEN k% = 46
        c$ = c$ + CHR$(k%)
        END_IF
    NEXT i%
    ITEM_ADD 1, a$ + c$: sad = sad + 16
  NEXT j%
END_SUB
' -----------------------------------------------------------------------------
' ------------------------------------------------------------------------------
SUB Calcul()
  SHOW 50: TO_FOREGROUND 50
END_SUB
' ------------------------------------------------------------------------------
' appui sur une touche de la calculette
clical:

  i%=NUMBER_CLICK-52
  y = INT(i%/4): x = i%-y*4
  libel$ = lab$(y, x): ' libellé de la touche
  va$ = TRIM$(ITEM_READ$(51,1))
  vi = HEX(va$)
  CLEAR 51
  IF x < 3
    ' touche numérique
    IF y < 5 OR x = 1
        vl = HEX(lab$(y,x))
        IF vi = 0
            va$ = lab$(y,x)
        ELSE
            va$ = HEX$(vi*16 + vl)
        END_IF
        ITEM_ADD 51, RIGHT$(STRING$(11," ")+va$, 12)
    ELSE
        IF x = 0
            ' clear
            ITEM_ADD 51, STRING$(11," ")+"0"
        ELSE
            ' touche '='
            IF ope > 0
                SELECT ope
                    CASE 1: vl = INT(vp/vi)
                    CASE 2: vl = vp*vi
                    CASE 3: vl = vp-vi
                    CASE 4: vl = vp+vi
                END_SELECT
                va$ = HEX$(vl)
                ITEM_ADD 51, RIGHT$(STRING$(11," ")+va$, 12)
                ope = 0
            END_IF
        END_IF
    END_IF
ELSE
    SELECT y
        CASE 0
        CASE 1: ope = 1: ' division
        CASE 2: ope = 2: ' multiplication
        CASE 3: ope = 3: ' soustraction"
        CASE 4: ope = 4: ' addition
        CASE 5
    END_SELECT
    vp = vi
    ITEM_ADD 51, STRING$(11," ")+"0"
END_IF
return

' -------------- FIN ----------------------

Manque l'utilisation de DIM_LOCAL... Énième programme de dump 06


Dernière édition par Nardo26 le Dim 30 Sep 2012 - 23:22, édité 3 fois (Raison : Optimisation de i% dans clical)
Revenir en haut Aller en bas
http://nardo26.lescigales.org
JL35




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

Énième programme de dump Empty
MessageSujet: Re: Énième programme de dump   Énième programme de dump EmptyDim 30 Sep 2012 - 23:22

Bien Nardo, je dois bien admettre que ça marche.

Je reste néanmoins sceptique sur l'utilité de la procédure Main pour mettre en place les objets, qui n'est appelée qu'une seule fois au lancement... ça ne me paraît pas plus clair que de tout déclarer avant le End.

Je veux bien que Chf ne soit pas très parlant, dans mon esprit c'était Choix fichier...
Revenir en haut Aller en bas
Nardo26

Nardo26


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

Énième programme de dump Empty
MessageSujet: Re: Énième programme de dump   Énième programme de dump EmptyDim 30 Sep 2012 - 23:25

Exact, faire une procédure main n'apporte pas grand chose.
de meme : NewAd(),Calcul() et Chf() pourraient être de simple gosub puisqu'il n' y a pas de passage de paramètre, ni de variables locales...
Revenir en haut Aller en bas
http://nardo26.lescigales.org
JL35




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

Énième programme de dump Empty
MessageSujet: Re: Énième programme de dump   Énième programme de dump EmptyDim 30 Sep 2012 - 23:27

Finalement, on en revient à ma version avec Gosubs ! Very Happy
Je ne vois aucun passage de paramètres ni variables locales dans vos SUB...
Revenir en haut Aller en bas
Nardo26

Nardo26


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

Énième programme de dump Empty
MessageSujet: Re: Énième programme de dump   Énième programme de dump EmptyDim 30 Sep 2012 - 23:36

JL35 a écrit:
...Je veux bien que Chf ne soit pas très parlant, dans mon esprit c'était Choix fichier...
J'avais deviné mais dans la mesure du possible avoir des noms de procédures et de variables "parlant" n'est pas un luxe.
Cela aide à la compréhension du programme pour la personne qui n'a pas écrit le prog. Et même l'auteur du source y gagne le jour où il doit retoucher son code plusieurs mois après...Énième programme de dump 01

JL35 a écrit:
Finalement, on en revient à ma version avec Gosubs !
Pas vraiment : dans le cadre d'un langage basic, pourquoi se priver de gosub quand il n'est pas absolument necessaire de passer par un sub ?
Le seul cas que je vois de faire des SUB sans passage de paramètre, c'est de pouvoir déclarer dedans des variables locales ou lorsque l'on sait que la procedure est susceptible d'évoluer vers quelque chose de paramètrable...

Le code, dans l'etat actuel, n"a pas besoin de SUB...
Revenir en haut Aller en bas
http://nardo26.lescigales.org
JL35




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

Énième programme de dump Empty
MessageSujet: Re: Énième programme de dump   Énième programme de dump EmptyDim 30 Sep 2012 - 23:43

C'est exactement ce que je voulais dire, tout (presque) passer en SUB était un exercice de style de papydall, mais ça ne me paraissait pas nécessaire pour ce programme-ci.
D'ailleurs j'ai remis à jour le 1er post en tenant compte de tes remarques sur les étiquettes intempestives, j'ai supprimé les Return pas jolis au milieu des s/p, comme ça c'est mieux structuré.

Et pour les étiquettes parlantes, bien d'accord avec toi, c'est meilleur pour tout le monde y compris pour l'auteur. Dans la fougue du moment on n'y pense pas toujours, et c'est un tort...

Si on me demande, je suis Sleep
Revenir en haut Aller en bas
Nardo26

Nardo26


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

Énième programme de dump Empty
MessageSujet: Re: Énième programme de dump   Énième programme de dump EmptyDim 30 Sep 2012 - 23:54

On peut faire evoluer ton programme de dump ! Énième programme de dump 06

Une chose qui serait intéressant de rajouter dans ton programme c'est la notion de structure:
par exemple tu créés un fichier qui contient la description d'un entête de fichier bitmap:
codé de cette manière : N_OCTET|Description

2|signature "BM"
4|taille de l'image (pas toujours fiable)
4|réservés
4|offset du début de l'image (en prenant en compte la taille de la palette)
4|taille de la seconde entête (généralement 40 octets >> "28" )
4|largeur de l'image (colonne)
4|longueur de l'image (ligne)
2|nombre de plan (toujours à 1)
2|nombre de bit par pixel
4|type de compression (0=aucune, 1=RLE-8, 2=RLE-4)
4|taille de la carte de bit en octet
4|résolution horizontale en pixel par mètre (pas toujours fiable)
4|résolution verticale en pixel par mètre (pas toujours fiable)
4|nombre de couleurs dans l'image (ou 0 pour une image RVB)
4|nombre de couleurs importante dans l'image (0 si toutes)


Cela serait intéressant de pouvoir charger ce fichier et de pouvoir l'appliquer sur une portion du fichier (sur l'offset en cours)
Le résultat serait affiché par exemple dans un 2eme form...
EDIT : faudrait prévoir également dans la def le type de codage (intel/motorola)

EDIT 2:
Sinon on peut faire en sorte que la calculatrice soit autonome:
Code:

Calculatrice(1)
END


' ------------------------------------------------------------------------------
' D'après un source de JL35
' Adaptation Nardo26
' nombre d'objets utilisés: [p;p+25]
' ------------------------------------------------------------------------------
SUB Calculatrice(p)
  DIM_LOCAL n,x,y,yd,xd
  DIM_LOCAL taille:taille=30
  ' une seule déclaration !
  IF VARIABLE("Calculatrice_id")=0
    ' Variables/labels globales : on a pas le choix, il faut gérer des evenements.
    DIM Calculatrice_id: Calculatrice_id = p
    DIM Calculatrice_val1
    DIM Calculatrice_operation
    LABEL Calculatrice_click
    DIM lab$(5,3)
    DATA "Calculatrice_data"
    DATA "D","E","F","","A","B","C"," /","7","8","9","x"
    DATA "4","5","6"," -","1","2","3","+","C","0","=",""
    ' on pointe sur les bonnes datas
    RESTORE:READ lab$(0,0):WHILE lab$(0,0)<>"Calculatrice_data":READ lab$(0,0):END_WHILE
    n=p
    FORM n: TOP n,200: LEFT n,150: WIDTH n,160: HEIGHT n,290: BORDER_SMALL n
    HIDE p
    n=n+1
    LIST n: PARENT n,p: TOP n,0: WIDTH n,WIDTH(p)-16: HEIGHT n,25
    COLOR n,200,200,200: FONT_NAME n,"Lucida Console": FONT_SIZE n,14
    n = n+1: yd = 30: xd = 5
    FOR y = 0 TO 5
      FOR x = 0 TO 3
        PICTURE n: PARENT n,p: TOP n,yd+(taille+5)*y: LEFT n,xd+(taille+5)*x: WIDTH n,taille: HEIGHT n,taille
        READ lab$(y,x)
        2D_TARGET_IS n
        COLOR n,128,128,128: 2D_FILL_COLOR 128,128,128
        IF x=0 AND y=5
            COLOR n,164,0,0: 2D_FILL_COLOR 164,0,0
        ELSE
            IF x = 3 OR (x=2 AND y=5)
              COLOR n,80,80,80: 2D_FILL_COLOR 80,80,80
            END_IF
        END_IF
        PRINT_TARGET_IS n
        FONT_COLOR n,255,255,255: FONT_SIZE n,18
        FONT_BOLD n: PRINT_LOCATE 7,0: PRINT lab$(y,x)
        ON_CLICK n,Calculatrice_click
        n = n + 1
      NEXT x
    NEXT y
    HEIGHT p,272: CAPTION p, " CALCULETTE HEXA"
    ITEM_ADD p+1,"          0"
    PRINT_TARGET_IS 0:2D_TARGET_IS 0
    SHOW p
  ELSE
    SHOW Calculatrice_id: TO_FOREGROUND Calculatrice_id
  END_IF
END_SUB

' ------------------------------------------------------------------------------
' appui sur une touche de la calculette
Calculatrice_click:
  TraiteCalculatrice()
RETURN

SUB TraiteCalculatrice()
  DIM_LOCAL i%,x,y,vl,vi,va$
  DIM_LOCAL libel$
  i% = NUMBER_CLICK-(Calculatrice_id+2)
  y = INT(i%/4): x = i%-y*4
  libel$ = lab$(y, x): ' libellé de la touche
  va$ = TRIM$(ITEM_READ$(Calculatrice_id+1,1))
  vi = HEX(va$)
  CLEAR Calculatrice_id+1
  IF x < 3
    ' touche numérique
    IF y < 5 OR x = 1
      vl = HEX(lab$(y,x))
      IF vi = 0
        va$ = lab$(y,x)
      ELSE
        va$ = HEX$(vi*16 + vl)
      END_IF
      ITEM_ADD Calculatrice_id+1, RIGHT$(STRING$(11," ")+va$, 12)
    ELSE
      IF x = 0
        ' clear
        ITEM_ADD Calculatrice_id+1, STRING$(11," ")+"0"
      ELSE
        ' touche '='
        IF Calculatrice_operation > 0
          SELECT Calculatrice_operation
            CASE 1: vl = INT(vp/vi)
            CASE 2: vl = Calculatrice_val1*vi
            CASE 3: vl = Calculatrice_val1-vi
            CASE 4: vl = Calculatrice_val1+vi
          END_SELECT
          va$ = HEX$(vl)
          ITEM_ADD Calculatrice_id+1, RIGHT$(STRING$(11," ")+va$, 12)
          Calculatrice_operation = 0
        END_IF
      END_IF
    END_IF
  ELSE
    IF y>1 AND y<5 THEN Calculatrice_operation = y : ' 1:division 2:multiplication 3:soustraction 4:addition
    Calculatrice_val1 = vi
    ITEM_ADD Calculatrice_id+1, STRING$(11," ")+"0"
  END_IF
END_SUB
Revenir en haut Aller en bas
http://nardo26.lescigales.org
papydall

papydall


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

Énième programme de dump Empty
MessageSujet: Re: Énième programme de dump   Énième programme de dump EmptyLun 1 Oct 2012 - 2:01

Salut JL35, salut Nardo26, salut tout le monde.

Toutes vos remarques sont tout à fait enrichissantes.
Comme beaucoup de Forumistes (j’espère), j’essaye de tester l’utilisation des SUB dans diverses situations et ce pour comprendre leur fonctionnement et peut être déceler leur limites ou du moins les cas où ça ne marche pas.

Comme je n’ai pas d’idées significatives ces jours-ci, je me suis rabattu sur le programme de JL35 pour .... faire mes tests !
Ça a déclenché un échange bénéfique de points de vue entre Nardo26 et JL35.

Le programme originel de JL35 est très bien fait et n’a pas besoin d’être reformulé.
Mais ....
Si je me suis contenté d’un commentaire vague du genre « bravo !», « voila un bon utilitaire ! » ou « merci JL35, ton programme est bien », etc.., dans ce cas peut être qu’ on serait privé du point de vue de Nardo26 suivi de celui de JL35 sur ce qui a été échangé concernant l’utilité ou la préférence d’utiliser telle approche ou telle autre pour coder une SUB ou un GOSUB etc..

PS : j’ai transformé ‘clical’ en SUB et je l’appelle à partir de ‘TraiteBouton’ : donc un LABEL en moins.
C’est juste pour voir, c’est tout !
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Énième programme de dump Empty
MessageSujet: Re   Énième programme de dump EmptyLun 1 Oct 2012 - 2:10

Comme toi je suis en manque d' inspiration
certains des progs que j'avais entamé n'ayant pas d'utilité
à mon goût, je les ai lâchement abandonné et comme
je n'ai pas envie de ré-inventer la roue.... Laughing
Je lis vos commentaires sur le topic de JL35
Mais j' ai déjà vu d'autres prog du style et comme j'aime
bien savoir à quoi servent les choses, je vais oser pauser la question ici...

pale A quoi cela peut il bien servir tout çà ?
Revenir en haut Aller en bas
papydall

papydall


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

Énième programme de dump Empty
MessageSujet: Re: Énième programme de dump   Énième programme de dump EmptyLun 1 Oct 2012 - 2:24

Une calculatrice Hexa autonome c’est parfait !
Justement, puisqu’il s’agit d’une calculatrice et rien d’autre, n’est-il pas mieux de cacher le FORM 0 ?
J’ai ajouté, ligne 26 (après n = p) : HIDE 0
Ce n’est certainement qu’un détail et je n’ai pas d’autres remarques à faire sauf GOOD, VERY GOOD.

That’s all folks !

Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
papydall

papydall


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

Énième programme de dump Empty
MessageSujet: Re: Énième programme de dump   Énième programme de dump EmptyLun 1 Oct 2012 - 2:31

@Ygeronimi

Puisque tu as pausé la question, moi je pose la réponse
Mais ça ne sert à rien voyons sauf à ....
Le but ultime de la programmation n’est-il pas de trouver des solutions à des problèmes ?
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Énième programme de dump Empty
MessageSujet: re   Énième programme de dump EmptyLun 1 Oct 2012 - 2:36

@ Papydall,

...Sauf que...depuis que je fais un peu de programmation,
je me crée plus de problème que ce que je n'en résolve...

Énième programme de dump Sivousmecherchez
Revenir en haut Aller en bas
papydall

papydall


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

Énième programme de dump Empty
MessageSujet: Re: Énième programme de dump   Énième programme de dump EmptyLun 1 Oct 2012 - 2:50

Ne soit pas trop modeste !
Tu as fait des beaux programmes.
Tu as trouvé beaucoup de solutions.
Tu as posé des questions.
Tu as reçu des réponses.
Et moi, directement ou indirectement, j’ai appris bien des choses de toi. Énième programme de dump B_shake
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Énième programme de dump Empty
MessageSujet: re   Énième programme de dump EmptyLun 1 Oct 2012 - 2:59

Ce n'est pas de la modestie, c' est une constatation... Laughing

Ceci dit et c'est un autre sujet, je suis sur un problème de #include
qui me donne souci pour une bibliothèque portable mais
:oops:c'est un autre sujet...
Énième programme de dump A_hit
Revenir en haut Aller en bas
Nardo26

Nardo26


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

Énième programme de dump Empty
MessageSujet: Re: Énième programme de dump   Énième programme de dump EmptyLun 1 Oct 2012 - 8:29

papydall a écrit:
Une calculatrice Hexa autonome c’est parfait !
Justement, puisqu’il s’agit d’une calculatrice et rien d’autre, n’est-il pas mieux de cacher le FORM 0 ?
J’ai ajouté, ligne 26 (après n = p) : HIDE 0
Ce n’est certainement qu’un détail et je n’ai pas d’autres remarques à faire sauf GOOD, VERY GOOD.
Bonjour papydall ! Énième programme de dump 01

Heu... le hide 0 n'est peut être pas une bonne chose... l'appel en lui-même à la procédure sert juste à titre d'exemple. Le code de Calculatrice() est prévu pour être intégré dans une librairie...

Imagines que demain tu nous fait un programme de la mort-qui-tue et que tu inclus le code de cette calculatrice...
Tu n'aimerais peut être pas que l'appel à cette procédure fasse un hide du beau formulaire que tu t'es escrimer à faire...Énième programme de dump 07

La seule chose que je reproche à Calculatrice() c'est qu'elle n'est pas entièrement neutre... il manque ces commandes :
  • COMMAND_TARGET_IS()
  • PRINT_TARGET_IS()
  • 2D_TARGET_IS()
  • 3D_TARGET_IS()

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

papydall


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

Énième programme de dump Empty
MessageSujet: Re: Énième programme de dump   Énième programme de dump EmptyLun 1 Oct 2012 - 11:59

Capito, Nardo26
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Nardo26

Nardo26


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

Énième programme de dump Empty
MessageSujet: Re: Énième programme de dump   Énième programme de dump EmptyLun 1 Oct 2012 - 13:03

@JL35 : qu'en penses-tu des idées que j'ai lancé (voir page 1)...
C'est pas le genre de truc courant: on trouve bien cette fonctionnalité mais que sur des prog payants (comme celui-ci)

EDIT :
Pour ceux qui sont en manque d'inspiration : cela serait une bonne idée d'essayer de le mettre en place.
Je ne pense pas que JL35 serait contre... Smile
Revenir en haut Aller en bas
http://nardo26.lescigales.org
JL35




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

Énième programme de dump Empty
MessageSujet: Re: Énième programme de dump   Énième programme de dump EmptyLun 1 Oct 2012 - 14:10

@ygeronimi
Tu ne vois pas à quoi sert un programme de dump fichier ??? eh bien tout ce qui se fait en informatique finit par se retrouver archivé dans un fichier quelque part, sous tout un tas de formats plus ou moins exotiques: formats avec le texte en clair, le plus simple, ou plus généralement en binaire: images etc.
Un exemple: j'ai envie à partir d'un programme Panoramic de lire les données d'un fichier image .bmp, le programme de dump est indispensable pour voir ce qu'il y a dedans, et à quel endroit (en ayant déjà une idée de sa structure, tout de même).
Un autre exemple vécu: je veux à partir d'un programme Panoramic générer un fichier .rtf lisible par wordpad, avec les mises en page et enrichissements. Dans Wordpad j'écris un texte avec des enrichissements divers, bien ciblés. J'enregistre ce texte au format .rtf, puis ensuite j'étudie le fichier produit avec mon programme de dump pour voir comment se sont traduits les enrichissements dans le fichier, pour en déduire les règles et reproduire la même chose par programme: structure de l'en-tête rtf, italique se traduit par ceci, couleur rouge par cela, tailles, polices, etc.
Ce ne sont que deux exemples entre mille, pour étudier la structure des fichiers (évidemment pour un non programmeur ça n'a aucun intérêt !).

@papydall
Tu as évidemment bien fait de proposer ta traduction en SUBs, comme tu vois c'est enrichissant pour tout le monde puisque ça fait sortir des idées du schmilblick.

@Nardo
Il faut que je regarde de plus près ce que tu proposes, mais là on change de catégorie, ce n'est plus du tout le petit programme de dump universel que j'avais dans l'idée au départ, mais ça devient un peu plus... spécialisé.
A voir.
En tout cas je ne suis évidemment absolument pas contre si quelqu'un veut se lancer, même en partant de ce que j'ai fait. J'avais même envisagé une touche de bascule du mode hexa au mode décimal, mais ça compliquait un peu (il faut gérer la virgule) et ça n'avait pas trop d'intérêt dans l'application où je l'ai mise (dump).
PS à Nardo, finalement je suis assez sceptique concernant ton idée de programme de dump universel à qui on communiquerait la structure du fichier... tu donnes en exemple les fichier bmp, là c'est facile parce que la structure est toujours la même, mais dans beaucoup d'autres cas (la majorité ?) la structure n'est pas fixe et les éléments découlent les uns des autres par chaînage, par exemple les images jpg, et là c'est beaucoup plus coton...
Revenir en haut Aller en bas
Contenu sponsorisé





Énième programme de dump Empty
MessageSujet: Re: Énième programme de dump   Énième programme de dump Empty

Revenir en haut Aller en bas
 
Énième programme de dump
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Encore un programme de dump...
» ce fut mon 2ème programme en panoramic! (mauvais programme)
» fermer le programme qui lance un autre programme
» Dump fichier (bis)
» Petite sub de dump fichier

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: