PureBin2Data Tool Update

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

:D danke,

ich werde es wohl nochmal schreiben, da ich die vorhandene GUI mangels
GDesign nicht mehr erweitern kann. Dann wir wohl auch ein direktes
einfügen in die IDE möglich sein. Aber ihr werdet euch gedulden müssen,
wird noch ein weilchen dauern, bevor ich anfange (hat sich 2 Jahre kaum
einer für interessiert, werden ein paar Wochen wohl nichts ausmachen :mrgreen: )

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Daunloht kapott, wo kann isch rundärladän?
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Fluid Byte hat geschrieben:Daunloht kapott, wo kann isch rundärladän?
Haste etwas Zeit, dann werde ich es mal "Neu machen", wenn nicht kann ich
ja erstmal temporär irgendwo hochladen (wenn ichs denn finde)

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Ich hab mir das daheim als IDE-Tool gebastelt (includebinarys selektieren, Knöpfle drücken und es wird gleich ersetzt und auch der Aufruf geändert), kann ja Source hier reinpappen die Tage, wenn erwünscht.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

@HeX0R
wäre Nett, ich müßte die ganze GUI neu erstellen und es mangelt mir
momentan an Zeit.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Gut, dann machen wir das so.
Versuche heute Abend dran zu denken.
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Hier kommt der Source.
Ist nix kommentiert und wird auch kein Support geleistet, Änderungen dürft ihr selbst machen!

Code: Alles auswählen

;/----------
;|
;| (c)HeX0R 2008
;|
;/----------

Global NewList Lines.s()
Global NewList NoConvert.s()

Procedure.l AddData(y.l, *C.LONG, Add.l)
	Protected i.l, j.l, PackSize.l, Size.l, Long.l, Crunch.l, Result.l
	Protected a$, Line.s, MyLSet.s, Label.s, BinaryFile.s
	Protected *Buffer, *BufferPack

	SelectElement(Lines(), y + Add - 1)
	y = -1
	Repeat
		a$   = Lines()
		Line = Trim(RemoveString(a$, #TAB$))
		If Left(LCase(Line), 13) = "includebinary"
			y = ListIndex(Lines())
			If MyLSet = ""
				For i = 1 To Len(a$)
					If Mid(a$, i, 1) = " " Or Mid(a$, i, 1) = #TAB$
						MyLSet + Mid(a$, i, 1)
					Else
						Break
					EndIf
				Next i
			EndIf
		ElseIf FindString(a$, Chr(34), 1) = 0 And FindString(a$, ":", 1)
			Label = "?" + LCase(Trim(RemoveString(StringField(a$, 1, ":"), #TAB$)))
			Break
		EndIf
	Until PreviousElement(Lines()) = 0
	If y = -1
		ProcedureReturn 0
	EndIf

	SelectElement(Lines(), y)
	Line = Trim(RemoveString(Lines(), #TAB$))
	If Left(LCase(Line), 13) <> "includebinary"
		ProcedureReturn 0
	EndIf

	BinaryFile = StringField(Line, 2, Chr(34))
	Size       = FileSize(BinaryFile)

	ForEach NoConvert()
		If NoConvert() = BinaryFile
			BinaryFile = ""
			Break
		EndIf
	Next

	If BinaryFile = "" Or ReadFile(0, BinaryFile) = 0
		ProcedureReturn 0
	EndIf

	*Buffer = AllocateMemory(Size)
	If *Buffer = 0
		CloseFile(0)
		ProcedureReturn 0
	EndIf

	ReadData(0, *Buffer, Size)
	CloseFile(0)

	*BufferPack = AllocateMemory(Size + 8)
	If *BufferPack
		PackSize = PackMemory(*Buffer, *BufferPack, Size, 9)
		If PackSize
			Crunch = #True
			FreeMemory(*Buffer)
			*Buffer = *BufferPack
			Swap Size, PackSize
			If *C\l = 0
				*C\l = #True
			EndIf
		EndIf
	EndIf

	If Size / 32 > 1000 And MessageRequester("Sure ?", "The binary " + Chr(34) + BinaryFile + Chr(34) + " will produce " + Str(Size / 32) + " additional lines!" + #LF$ + "Proceed anyway ?", #PB_MessageRequester_YesNo) <> #PB_MessageRequester_Yes
		AddElement(NoConvert())
		NoConvert() = BinaryFile
		FreeMemory(*Buffer)
		ProcedureReturn 0
	EndIf

	Lines() = MyLSet + ";" + Lines()
	AddElement(Lines())
	Lines() = MyLSet + ";<<Changed through BinaryIncluder (c)HeX0R>>"
	AddElement(Lines())
	Result  = 2

	If Crunch
		Lines() = MyLSet + ";The following binary is packed!"
		AddElement(Lines())
		Lines() = MyLSet + "Data.l $" + RSet(Hex(PackSize), 8, "0") + " ;<-Size of this unpacked Binary"
		AddElement(Lines())
		Result + 2
	EndIf

	For j = 0 To Size Step 32
		Line = MyLSet + "Data.l "
		For i = 0 To 7
			If (j + i * 4) > Size
				Break
			EndIf
			Long = PeekL(*Buffer + j + (i * 4))
			Line + "$" + RSet(Hex(Long), 8, "0") + ", "
		Next i
		Line    = Left(Line, Len(Line) - 2)
		Lines() = Line
		If j < Size
			Result + 1
			AddElement(Lines())
		EndIf
	Next j
	FreeMemory(*Buffer)

	ForEach Lines()
		If Crunch And FindString(LCase(Lines()), "catchimage", 1) And FindString(LCase(Lines()), Label, 1) And FindString(LCase(Lines()), "catchimagepacked", 1) = 0
			Lines() = ReplaceString(Lines(), "catchimage", "CatchImagePacked", #PB_String_NoCase)
		EndIf
	Next

	ProcedureReturn Result
EndProcedure

Procedure.l Main()
	Protected i.l, j.l, k.l, x.l = -1, y.l = -1, BOM.l, Crunch.l, Add.l, AddProc.l = #True
	Protected a$, TempFile.s

	If GetEnvironmentVariable("PB_TOOL_IDE") = ""
		;-Install Me
		If CountProgramParameters() = 0
			a$ = PathRequester("Select Path to PureBasic:" + #LF$ + "(Press Cancel if you don't want me to install in the IDE)" , "")
			If a$
				CompilerIf #PB_Compiler_OS = #PB_OS_Linux
				If OpenPreferences(a$ + "tools.prefs") = 0
					OpenPreferences(GetEnvironmentVariable("HOME") + ".purebasic/tools.prefs")
				EndIf
				CompilerElse
				If OpenPreferences(a$ + "tools.prefs") = 0
					OpenPreferences(GetEnvironmentVariable("APPDATA") + "\Purebasic\tools.prefs")
				EndIf
				CompilerEndIf
				PreferenceGroup("ToolsInfo")
				j = ReadPreferenceLong("ToolCount", 0)
				k = #True
				For i = 1 To j
					PreferenceGroup("Tool_" + Str(i - 1))
					If ReadPreferenceString("Command", "") = ProgramFilename()
						k = #False
					EndIf
				Next i
				If k
					PreferenceGroup("Tool_" + Str(j))
					WritePreferenceString("Command", ProgramFilename())
					WritePreferenceString("Arguments", Chr(34) + "%TEMPFILE" + Chr(34) + " %SELECTION")
					WritePreferenceString("WorkingDir", GetPathPart(ProgramFilename()))
					WritePreferenceString("MenuItemName", "BinaryIncluder")
					WritePreferenceLong("Shortcut", 262258) ;Default Alt+F3
					WritePreferenceString("ConfigLine", "")
					WritePreferenceLong("Trigger", 0)
					WritePreferenceLong("Flags", 1)
					WritePreferenceLong("ReloadSource", 2)
					WritePreferenceLong("HideEditor", 0)
					WritePreferenceLong("HideFromMenu", 0)
					WritePreferenceLong("SourceSpecific", 0)
					WritePreferenceLong("Deactivate", 0)
					PreferenceGroup("ToolsInfo")
					WritePreferenceLong("ToolCount", j + 1)
					MessageRequester("OK", "BinaryIncluder Tool successfully installed in PB-IDE!" + #LF$ + "Please restart your IDE.")
				EndIf
				ClosePreferences()
			EndIf
		EndIf
		ProcedureReturn #False
	EndIf

	TempFile = ProgramParameter()
	a$       = ProgramParameter()
	y        = Val(StringField(a$, 1, "x"))
	x        = Val(StringField(a$, 3, "x"))

	If y = 0 Or TempFile = ""
		ProcedureReturn #False
	EndIf

	If OpenFile(0, TempFile) = 0
		ProcedureReturn #False
	EndIf

	BOM = ReadStringFormat(0)
	While Eof(0) = 0
		AddElement(Lines())
		Lines() = ReadString(0, BOM)
		If Lines() = "Procedure.l CatchImagePacked(ImageID.l, *Address.LONG, Size.l = 0, Flags.l = 0)"
			AddProc = #False
		EndIf
	Wend
	CloseFile(0)

	k = #False
	For i = y To x
		j = AddData(i, @Crunch, Add)
		If j
			k = #True
			Add + j
		EndIf
	Next i

	If k = #False Or CreateFile(0, TempFile) = 0
		ProcedureReturn #False
	EndIf

	WriteStringFormat(0, BOM)
	If Crunch And AddProc
		WriteStringN(0, ";Following Procedure can be used for Catching Images, which are marked as packed!")
		WriteStringN(0, "Procedure.l CatchImagePacked(ImageID.l, *Address.LONG, Size.l = 0, Flags.l = 0)")
		WriteStringN(0, #TAB$ + "Protected Result.l, *Buffer")
		WriteStringN(0, "")
		WriteStringN(0, #TAB$ + "*Buffer = AllocateMemory(*Address\l)")
		WriteStringN(0, #TAB$ + "If *Buffer")
		WriteStringN(0, #TAB$ + #TAB$ + "If UnPackMemory(*Address + 4, *Buffer)")
		WriteStringN(0, #TAB$ + #TAB$ + #TAB$ + "Result = CatchImage(ImageID, *Buffer, Size, Flags)")
		WriteStringN(0, #TAB$ + #TAB$ + "EndIf")
		WriteStringN(0, #TAB$ + #TAB$ + "FreeMemory(*Buffer)")
		WriteStringN(0, #TAB$ + "EndIf")
		WriteStringN(0, "")
		WriteStringN(0, #TAB$ + "ProcedureReturn Result")
		WriteStringN(0, "EndProcedure")
		WriteStringN(0, "")
	EndIf

	ForEach Lines()
		WriteStringN(0, Lines(), BOM)
	Next
	CloseFile(0)

	ProcedureReturn #True
EndProcedure

Main()
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Ich kapier nicht ganz wie's funktioniert. Ich will eigentlich nur ein Bild oder ähnliches angeben woraufhin dann die komprimierte oder unkomprimierte DataSection erstellt wird.

Ich hab den Pfad zu PB angegeben, dann hat er den entsprechenden Eintrag in tools.pref eingetragen aber was ruft er auf:

...\Lokale Einstellungen\Temp\PureBasic_Compilation0.exe?
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

So auf die schnelle Blick ich da auch nicht durch, macht bisher nichts ausser
Installation.

Hab den vorsichtshalber doch erstmal die alte Version temporär hochgeladen:
http://www.realsource.de/tmp/PureBin2Data.zip
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Danke Tommyboy, ich weiß das sehr zu schätzen! 8)
Zuletzt geändert von Fluid Byte am 25.05.2009 15:22, insgesamt 1-mal geändert.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Antworten