Pak Format
Übersicht BlitzBasic FAQ und Tutorials
LunatixBetreff: Pak Format |
So, Aug 13, 2006 9:09 Antworten mit Zitat |
|
---|---|---|
Kleines Tutorial über Pak Files :
Code: [AUSKLAPPEN] Function InitPak(pak_path$) stream = ReadFile(pak_path) 3bytes : pak -> als pak identifizieren Code: [AUSKLAPPEN] for i = 0 to 2 sig$ = sig + chr(ReadByte(Stream)) next if not sig$ = "pak" then Return -1 4bytes(int) : paksize -> ateigrösse der *.pak angeben 4bytes(int) : Headsize -> Grösse der datei ohne body (für banks) 4bytes(int) : Bodysize -> Grösse der datei ohne header (für banks) *****Ab hier geht der Header "richtig" los***** Code: [AUSKLAPPEN] Bank = CreateBank(HeadSize) For i = 0 to HeadSize-1 PokeByte bank,ReadByte (Stream) next 4bytes(int) : anzahl der dateien (PeekInt(bank,pos) : pos = pos + 4) **Alle Dateien auflisten** 4bytes(int) : Datei grösse 4bytes(int) : Datei Position in pak datei (für SeekFile) 2bytes(short) : Länge des Dateinamen (Len) x Bytes : Ascii zeichen des Dateinamen (For i = 0 to Len_FileName-1) Code: [AUSKLAPPEN] For i = 0 to DateiAnzahl-1 File_Size = PeekInt(bank,pos) : pos = pos + 4 File_Pos = PeekInt(bank,pos) : pos = pos + 4 Len_FName = PeekShort(bank,pos) : pos = pos + 4 For i = 0 to Len_Fname-1 byte = peekbyte(bank,pos) File_Name$ = File_Name + chr(byte) pos = pos + 1 next F.TPakFile = new TPakFile F\size = File_Size F\Pos = File_Pos F\Name$ = File_Name$ F\PakFile$ = Pak_Path$ next ****END OF HEADER*** Code: [AUSKLAPPEN] closefile (stream) P.TPakStream = new TPakStream P\id = Handle(p) P\path$ = pak_path$ return P\id End Function So, nun haben wir alle Informationen und können beliebig eine oder alle dateien Entpacken oder sogar direkt vom pak stream auslesen und laden. Code: [AUSKLAPPEN] Image = LoadImage(LoadFile(pak00,"bilder/bild.bmp","pak00")) Function LoadFile$(pakID,path$,FileTo$) ;PakID wäre der wert, der bei InitPak zurückgegeben wird path = Replace(path,"/","\") ; für Dateinamen-Vergleiche "/" slashes mit "\" ersetzen For P.TPakStream = each TPakStream if P\id = pakID For T.TPakFile = each TPakFile if T\pakFile = P\path if lower(T\Name) = lower(path) Stream = readFile(P\path) StreamTo = WriteDirFile(FileTo+path) ;<- datei mit dirs schreiben (siehe unten) Seekfile Stream,T\Pos For i = 0 to T\Size-1 byte = ReadByte(Stream) ;Hier könnte man das byte noch decodieren WriteByte StreamTo,byte next endif endif next endif next return FileTo+path end function Function WriteDirFile(file$) For i = 1 To Len(File) z$ = Mid(File,i,1) If z="/" Or z="\" If FileType (dir+DirName$) <> 2 CreateDir (dir+DirName) EndIf EndIf DirName$ = DirName + z Next f = WriteFile (file) Return f end function So könnte (oder ist) eine Pak datei aufgebaut, kann man noch beliebig mit passwort im header oder passwort für jede datei Datei verschlüsselb... etc. ausbauen. MFG JP |
||
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen... |
DATISBetreff: Danke |
Mi, Aug 23, 2006 14:59 Antworten mit Zitat |
|
---|---|---|
Cool, danke.
Sowas kann ich gebrauchen |
||
Frauen und Technik?
Männer und BHs? Beides möglich. |
Übersicht BlitzBasic FAQ und Tutorials
Powered by phpBB © 2001 - 2006, phpBB Group