Seite 1 von 2

Residents file auslesen.

Verfasst: 31.01.2017 21:28
von _JON_
Hallo Leute,

Habe mal eine Frage bezüglich der Resident files die man mit PB erstellen kann,
welche Konstanten und Strukturen im binarer Form speichern.

Ist dass eine Einbahnstraße oder kann man den Inhalt auch wieder auslesen,
also wieder eine *.pb Datei draus machen?

Re: Residents file auslesen.

Verfasst: 01.02.2017 13:24
von xXRobo_CubeXx
Das is leider nicht möglich!

Hast du n Resident file erstellt und den Quell Code gelöscht ? Versuchs mal mit einen Rettungsprogramm!

Oder habe ich deine Frage falsch verstanden ? Bin schon sehr müde muss erstma pennen gehn...
Bild

Re: Residents file auslesen.

Verfasst: 01.02.2017 14:41
von C h r i s :)
@xXRCXx :mrgreen: :mrgreen: :mrgreen: :allright:

Re: Residents file auslesen.

Verfasst: 01.02.2017 15:19
von NicTheQuick
Natürlich geht das. Purebasic muss es selbst doch auch können. Ich glaube im englischen Forum hat das sogar mal jemand gemacht, ich finde es nur gerade nicht. Vielleicht findest du es ja selbst.

@xXRobo_CubeXx:
Wenn du keine Lösung kennst und lieber falsch behauptest es gehe nicht, solltest du vielleicht lieber nichts sagen? Oder wolltest du nur dein "tolles" GIF posten?

Re: Residents file auslesen.

Verfasst: 01.02.2017 16:11
von xXRobo_CubeXx
Tut mir leid NicTheQuick :cry: ich meine irgendwo gelesen zu haben das es nicht möglich ist weil es kompiliert sei oder so. :roll: Dan hab ich das wohl mit etwas anderes verwechselt. :oops: war keine Absicht! War das Userlib die man nicht dekompilieren kann ? :? Tut mir leid NicTheQuick ich habe das schein bar verwechselt. Sei mir bitte nich böse. Sorry nochmal. :( :cry: Bist du noch sauer auf mich ? :oops:

Re: Residents file auslesen.

Verfasst: 01.02.2017 16:44
von _JON_
Ja, im englischen Forum gibt's ein Residents dumper

Der funktioniert allerdings überhaupt nicht oder die Struktur hat sich mittlerweile geändert,
ist ja auch schon 10 Jahre alt.

Auch warum dokumentiert man so ein Format nicht :(

Naja, wenn Ich mal etwas zu viel Zeit habe schreib Ich mal einen vernümftigen Dumper.

Re: Residents file auslesen.

Verfasst: 01.02.2017 17:22
von ts-soft
Dann würde ich den Compiler das überlassen. Das CompilerInterface kann u.a. auch die Strukturen und Konstanten
ermitteln.

Code: Alles auswählen

STRUCTURE<T><Name>

  Request the content of a structure known by the compiler.
  Parameters: The name of the structure.
  Response  : The structure definition, with each member on one line. The output is terminated by a line
              containing 'OUTPUT<T>COMPLETE'.
sowie seit Version 5.10

Code: Alles auswählen

CONSTANTLIST (since 5.10)

  Request a listing of all constants known by the compiler.
  Parameters: none
  Response  : The first line contains the number of constants to return, then one constant
              per line, using the following syntax: TYPE<T>NAME<T>VALUE.
              TYPE can be one of the following value:
                0: numeric value (quad)
                1: float value (double)
                2: string value
              The output is terminated by a line containing 'OUTPUT<T>COMPLETE'.
Komplette erklärung des Compilerinterface im SDK, die Datei Compilerinterface.txt (was auch sonst :wink: )

Re: Residents file auslesen.

Verfasst: 01.02.2017 17:32
von ts-soft
Hab hier noch einen Beispielcode für Strukturen:

Code: Alles auswählen

EnableExplicit

Structure strucMember
  Name.s
  List Members.s()
EndStructure

Structure strucName
  List Name.strucMember()
EndStructure

Procedure GetStructures(*p.strucName)
  Protected.i Compiler = RunProgram(#PB_Compiler_Home + "Compilers\pbcompiler", "/STANDBY", "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Write | #PB_Program_Hide)
  Protected.s tmp, Text
  
  If Compiler
    If IsProgram(Compiler)
      Repeat
        tmp = ReadProgramString(compiler)
      Until tmp = "READY"
      WriteProgramStringN(Compiler, "STRUCTURELIST")
      Repeat
        Text = ReadProgramString(Compiler)
        If Text <> "OUTPUT" + #TAB$ + "COMPLETE"
          AddElement(*p\Name())
          *p\Name()\Name = Text
        EndIf
      Until Text = "OUTPUT" + #TAB$ + "COMPLETE"
      FirstElement(*p\Name())
      DeleteElement(*p\Name())
      ForEach *p\Name()
        WriteProgramStringN(Compiler, "STRUCTURE" + #TAB$ + *p\Name()\Name)
        Repeat
          Text = ReadProgramString(Compiler)
          If Text <> "OUTPUT" + #TAB$ + "COMPLETE"
            AddElement(*p\Name()\Members())
            *p\Name()\Members() = Text
          EndIf
        Until Text = "OUTPUT" + #TAB$ + "COMPLETE"        
      Next
      WriteProgramStringN(Compiler, "END")
      CloseProgram(Compiler)
    EndIf
  EndIf 
EndProcedure

Define.strucName structs
GetStructures(@structs)
With structs
  ForEach \Name()
    Debug "Structure " + \Name()\Name
    ForEach \Name()\Members()
      Debug "   " + \Name()\Members()
    Next
    Debug "EndStructure"
    Debug ""
  Next
EndWith

Re: Residents file auslesen.

Verfasst: 01.02.2017 17:38
von _JON_
Danke ts-soft :allright:

Der Compiler kann das natürlich.
Also kurzer Hand mal alle anderen Residents in den Papierkorb verschoben
und was spukt der Compiler aus, die Strukturen meiner *.res :bounce:

Das gleiche noch mal wiederholt mit CONSTANT und CONSTANTLIST und der Tag ist gerettet :lurk:

Re: Residents file auslesen.

Verfasst: 01.02.2017 19:00
von NicTheQuick
Verrückt, ich krieg hier unter Linux folgende Meldung (nach Anpassen der Pfade und Parameter natürlich):

Code: Alles auswählen

STARTING	5.50	PureBasic 5.50 (Linux - x64)
ERROR	Can't load OS libraries, please re-install PureBasic.
Klappt ja super. :lol:
Na ich brauche es ja auch nicht, ich wollte nur mal gucken, ob es funktioniert.