Warum muss der Compiler gepatcht werden?
Verfasst: 06.02.2007 21:35
Morgen,
ich bin grade dabei ein, zwei kleine Tools für PureBasic zu entwickeln und lese mir grade den Source von jaPBe und dem PureBasic Editor durch.
Jetz ist mir eine Procedure aufgefallen:Jatzt frag ich mich: ÄhÖhOhÄhhh?
Was soll dass denn was hat gnozal bzw. GPI denn da gebaut warum muss der Compiler denn gepacht werden und was wird gepatcht?
Hoffentlich kann mir das einer erklären.
Mfg mknjc
[Edit:]So da kommen die Konstanten.
#LinkerFirstChar1 = 'p'
#LinkerFirstChar2 = 'P'
#Linker = "polink.exe"
#FLinker = "folink.exe"
Die Versionsnummer wird nicht geändert. Das scheint irgentwas mit dem polinker zu tun zu haben da jaPBe eine Datei namens folink.exe anlegt.
Aber warum wird nicht einfach die Datei geöffnet und alle polink.exe in folink.exe umbenannt und warum brauch jaPBe diese folink?
Ach ts-soft ich glaube nicht das man um eine Datei zu Kopieren irgentwelche $50 oder $70 in $66 ändern.
[/Edit]
ich bin grade dabei ein, zwei kleine Tools für PureBasic zu entwickeln und lese mir grade den Source von jaPBe und dem PureBasic Editor durch.
Jetz ist mir eine Procedure aufgefallen:
Code: Alles auswählen
Procedure PatchPB()
Result=#False
in$= CompilerPath$+"pbcompiler.exe"
out$= CompilerPath$+"PBCompiler-jaPBe.exe"
;
len=FileSize(in$)
If len>0
;
PBVersion$ = GetPBCompilerVersion(in$) ; gnozal
;
Mem_PbPatch=AllocateMemory(len+10)
*start.Byte=Mem_PbPatch
*buf.Byte=*start
If *buf
If ReadFile(#File_PBPatch,in$)
ReadData(*buf,len)
CloseFile(#File_PBPatch)
EndIf
For i=1 To len
;lcclnk.exe
If *buf\b=#LinkerFirstChar1 Or *buf\b=#LinkerFirstChar2
If CompareMemoryString(*buf,#Linker,#True,10)=0
*buf\b='f'
EndIf
EndIf
; If *buf\b='p' Or *buf\b='P'
; If CompareMemoryString(*buf,"PureBasic v",#True,11)=0
; *ver.BYTE=*buf+11
; PBVersion$=""
; While *ver\b<>0 And *ver\b<>13 And *ver\b<>10 And *ver\b<>'-'
; PBVersion$+Chr(*ver\b)
; *ver+1
; Wend
; PBVersion$=Trim(PBVersion$)
; EndIf
; EndIf
*buf+1
Next
If FileSize(out$)>0
If DeleteFile(out$)=0
;japbe läuft schon->alles OK
FreeMemory(Mem_PbPatch)
ProcedureReturn #True
EndIf
EndIf
If CreateFile(#File_PBPatch,out$)
WriteData(*start,len)
CloseFile(#File_PBPatch)
If SavePackMem(?FakeLCC, CompilerPath$+#FLinker)
Result=#True
EndIf
EndIf
FreeMemory(Mem_PbPatch)
EndIf
EndIf
ProcedureReturn Result
EndProcedure
Was soll dass denn was hat gnozal bzw. GPI denn da gebaut warum muss der Compiler denn gepacht werden und was wird gepatcht?
Hoffentlich kann mir das einer erklären.
Mfg mknjc
[Edit:]So da kommen die Konstanten.
#LinkerFirstChar1 = 'p'
#LinkerFirstChar2 = 'P'
#Linker = "polink.exe"
#FLinker = "folink.exe"
Die Versionsnummer wird nicht geändert. Das scheint irgentwas mit dem polinker zu tun zu haben da jaPBe eine Datei namens folink.exe anlegt.
Aber warum wird nicht einfach die Datei geöffnet und alle polink.exe in folink.exe umbenannt und warum brauch jaPBe diese folink?
Ach ts-soft ich glaube nicht das man um eine Datei zu Kopieren irgentwelche $50 oder $70 in $66 ändern.
[/Edit]