Seite 2 von 3

Verfasst: 23.08.2007 12:12
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

Verfasst: 24.07.2008 09:23
von Fluid Byte
Daunloht kapott, wo kann isch rundärladän?

Verfasst: 24.07.2008 09:43
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

Verfasst: 24.07.2008 12:12
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.

Verfasst: 24.07.2008 12:23
von ts-soft
@HeX0R
wäre Nett, ich müßte die ganze GUI neu erstellen und es mangelt mir
momentan an Zeit.

Gruß
Thomas

Verfasst: 24.07.2008 12:25
von HeX0R
Gut, dann machen wir das so.
Versuche heute Abend dran zu denken.

Verfasst: 24.07.2008 16:57
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()

Verfasst: 24.07.2008 17:27
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?

Verfasst: 24.07.2008 18:43
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

Verfasst: 24.07.2008 19:07
von Fluid Byte
Danke Tommyboy, ich weiß das sehr zu schätzen! 8)