Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Énième programme de dump | |
| | Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Énième programme de dump Sam 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 | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Énième programme de dump Dim 30 Sep 2012 - 0:45 | |
| J'aime bien la calculatrice Hexa | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Énième programme de dump Dim 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 ----------------------
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Énième programme de dump Dim 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... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Énième programme de dump Dim 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' 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). | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Énième programme de dump Dim 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 ?... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Énième programme de dump Dim 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. | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Énième programme de dump Dim 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...
Dernière édition par Nardo26 le Dim 30 Sep 2012 - 23:22, édité 3 fois (Raison : Optimisation de i% dans clical) | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Énième programme de dump Dim 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... | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Énième programme de dump Dim 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...
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Énième programme de dump Dim 30 Sep 2012 - 23:27 | |
| Finalement, on en revient à ma version avec Gosubs ! Je ne vois aucun passage de paramètres ni variables locales dans vos SUB... | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Énième programme de dump Dim 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... - 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... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Énième programme de dump Dim 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 | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Énième programme de dump Dim 30 Sep 2012 - 23:54 | |
| On peut faire evoluer ton programme de dump ! 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
| |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Énième programme de dump Lun 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 !
| |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: Re Lun 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.... 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... A quoi cela peut il bien servir tout çà ? | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Énième programme de dump Lun 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 ! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Énième programme de dump Lun 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 ?
| |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Lun 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... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Énième programme de dump Lun 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. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Lun 1 Oct 2012 - 2:59 | |
| Ce n'est pas de la modestie, c' est une constatation... 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... | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Énième programme de dump Lun 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 ! 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... 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()
| |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Énième programme de dump Lun 1 Oct 2012 - 11:59 | |
| | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Énième programme de dump Lun 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... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Énième programme de dump Lun 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... | |
| | | Contenu sponsorisé
| Sujet: Re: Énième programme de dump | |
| |
| | | | Énième programme de dump | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |