Page 1 sur 1

"Yet another" HexaView

Publié : mar. 18/sept./2018 20:05
par Flype
N'ayant pas trouvé de code qui me va bien pour un HexaView,

En voici un simple mais efficace, facile à intégrer dans un programme.

Code : Tout sélectionner

EnableExplicit

Procedure.s PeekAscii(*mem.BYTE, length.l)
  
  Protected text.s
  Protected *tmp.BYTE = *mem + length - 1
  
  While *mem < *tmp
    If (*mem\b < 32) Or (*mem\b > 126)
      text + "."
    Else
      text + Chr(*mem\b)
    EndIf
    *mem + 1
  Wend
  
  ProcedureReturn text
  
EndProcedure

Procedure.s HexaView(*memAddr.BYTE, memSize.l, columnCount.l = 16, baseAddr.l = 0)
  
  Protected *mem1.BYTE  = *memAddr
  Protected *mem2.BYTE  = *memAddr + memSize
  Protected lineWidth   = (13+(columnCount*3))
  Protected columnIndex =  0
  Protected bar.s, line.s, text.s
  
  bar = "+----------+-"
  bar + RSet("", columnCount*3, "-")
  bar + "+-"
  bar + RSet("", columnCount*1, "-")
  bar + "-+" + #CRLF$
  
  For columnIndex = 0 To columnCount - 1
    line + RSet(Hex(columnIndex), 2, "0") + " "
  Next
  
  text + bar
  text + "|  Offset  | " + line + "| "
  text + Space(columnCount + 1) + "|" + #CRLF$
  text + bar
  
  columnIndex = 0
  line = "| " + RSet(Hex(baseAddr, #PB_Long), 8, "0") + " | "
  While *mem1 < *mem2
    line + RSet(Hex(*mem1\b, #PB_Byte), 2, "0") + " "
    *mem1 + 1 : columnIndex + 1
    If (columnIndex >= columnCount) Or (*mem1 >= *mem2)
      text + LSet(line, lineWidth, " ") + "| "
      text + LSet(PeekAscii(*mem1 - columnIndex, columnIndex + 1), columnCount + 1, " ") + "|" + #CRLF$
      line = "| " + RSet(Hex(baseAddr + *mem1 - *memAddr, #PB_Long), 8, "0") + " | "
      columnIndex = 0
    EndIf
  Wend
  
  ProcedureReturn (text + bar)
  
EndProcedure





; Test code

Debug HexaView(?TEST1, ?TEST2-?TEST1, 16)

DataSection
  TEST1:
  IncludeBinary #PB_Compiler_Filename
  TEST2:
EndDataSection


Le résultat, avec une police taille fixe ressemble à çà :

Image

Image

La largeur est modifiable avec l'argument columnCount.

Re: "Yet another" HexaView

Publié : mar. 18/sept./2018 20:17
par Fig
Pratique et compact, j'aime beaucoup.
Comment tu as la couleur inversée sur le debugger ?

Re: "Yet another" HexaView

Publié : mar. 18/sept./2018 20:23
par falsam
Et hop c'est enregistré dans ma bibliothèque de code. Merci.

Re: "Yet another" HexaView

Publié : mar. 18/sept./2018 20:23
par Flype
Fig a écrit :Pratique et compact, j'aime beaucoup.
Comment tu as la couleur inversée sur le debugger ?
Je n'ai pas, j'ai simplement collé le résultat dans notepad++ :mrgreen:

Plus sérieusement, je cherchais surtout une option pour changer
la police de caractères utilisée par la console debug, mais y'a pas :?

A titre perso, j'utilise ce code dans un programme qui affiche
une vue Hexa dans un EditorGadget() + LoadFont("Courier New", 10).

Image

Re: "Yet another" HexaView

Publié : mar. 18/sept./2018 20:34
par Flype
Je suis un peu rouillé en PB, mais pour MAC et Linux
je suppose qu'il faudrait changer #CRLF$ par leur équivalent.

Code : Tout sélectionner

  CompilerIf #PB_Compiler_OS = #PB_OS_Windows
    Protected lineFeed.s = #CRLF$
  CompilerElse
    Protected lineFeed.s = #LF$
  CompilerEndIf

Re: "Yet another" HexaView

Publié : mar. 18/sept./2018 20:38
par falsam
Flype a écrit :e suis un peu rouillé en PB, mais pour MAC et Linux
je suppose qu'il faudrait changer #CRLF$ par leur équivalent.
Je n'ai rien changé à ton code qui fonctionne de la même manière sous Mac OS.

Je suppose que Fred a associé la bonne valeur à #CRLF$ en fonction de l'OS

Re: "Yet another" HexaView

Publié : mar. 18/sept./2018 20:40
par Flype
@falsam

Ah cool. Merci de ton retour :!:

Re: "Yet another" HexaView

Publié : jeu. 20/sept./2018 13:17
par Kwai chang caine
C'est rigolo...en plus d'être utile.. 8O
Fallait y penser :idea:
Merci pour le partage 8)

Re: "Yet another" HexaView

Publié : jeu. 20/sept./2018 14:28
par Ar-S
Sympa ce petit viewer. Et cool de voir un petit coin d'UAE :mrgreen:

Re: "Yet another" HexaView

Publié : jeu. 20/sept./2018 21:10
par venom
Bonjour,

Merci Flype. Voilà un code comme j'aime, simple mais efficace.
Merci du partage. :wink:






@++

Re: "Yet another" HexaView

Publié : ven. 21/sept./2018 9:23
par PAPIPP
Bonjour Flype

Tu dis qu’il n’y a pas de choix d’une police dans debug

Avec IDE de PB dans préférence… debugueur configuration
On a la possibilité de choisir la police que l’on désire
Cocher utiliser une autre police et sur le bouton police on peut choisir :
"Courier new" par exemple

A+

Re: "Yet another" HexaView

Publié : dim. 23/sept./2018 22:47
par Flype
@PAPIPP

Oui oui j'ai remarqué depuis :mrgreen:

En bon noob qui est passé à coté ( pourtant j'avais cherché :x ) :

https://www.purebasic.fr/english/viewto ... =3&t=71422


Un peu rouillé, désolé.

Re: "Yet another" HexaView

Publié : dim. 13/janv./2019 12:44
par Flype
Salut a tous,

J'ai besoin d'un petit service svp, un volontaire pour me compiler un programme pour linux debian/ubuntu ?

Re: "Yet another" HexaView

Publié : dim. 13/janv./2019 14:27
par boby
J'ai une deb 8.11 en VM si ça peut te servir.