Autor Beitrag
nahpetsM
Hält's aus hier
Beiträge: 2



BeitragVerfasst: So 29.03.09 09:35 
Hallo,
leider bin ich kein Delphi-Programmierer, aber von einem Mitglied habe ich einen wichtigen Source-Code erhalten, den ich gerne als eigenständiges exe-Modul verwenden möchte :

Kann mir hierfür jemand eine exe-Version erstellen ? (am besten mit integr. File-Explorer, zur Auswahl ) ?
Achja : die ZLIB-Bibliothek wird hier benötigt : www.gzip.org/zlib/

Gruss
Stephan

---------------------------------------------

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
uses Zlib;

function GetNumFromBuffer(src,numbytes, i : integer) : integer; var j : integer; begin
   case numbytes of
     1 : j := ord(outbuf[i]);
     2 : j := ord(outbuf[i]) + 256* ord(outbuf[i+1]);
     3 : j := ord(outbuf[i]) + 256* ord(outbuf[i+1])+ 256*256*ord(outbuf[i+2]);
     4 : begin
           if (ord(outbuf[i]) = 255and (ord(outbuf[i+1]) = 255)
             and (ord(outbuf[i+2]) = 255and (ord(outbuf[i+3]) = 255then
             j := -1
           else begin
             j := ord(outbuf[i]) + 256* ord(outbuf[i+1]) +
                   256*256*(ord(outbuf[i+2]));
             j := j + 256*256*256* ord(outbuf[i+3]);
           end;
         end;
    end;
    Result := j
end;

procedure TUserMap.DecompressSave(var s : string);
var ffile                     : file;
    attr,i,j,fsize,app        : integer;
    ok,isAddon                : boolean;
    t,temp                    : string;
    InputStream, OutputStream : TFileStream;
    DeCompressionStream       : TDeCompressionStream;
    Buffer                    : array[0..65535of char;
    q : integer;


   procedure GetGameFlag;
   var i,j : integer;
   begin
     IsSpecSave :=false;
     i := 0;
     j := GetNumFromBuffer(1,4, i);  //  52 00 65 00
     if j = 6619218 then IsSpecSave := true;
   end;

   procedure RemoveHeader;
   var j : integer;
       v : string;
   begin
     AssignFile(ffile,s);
     Reset(ffile, 1);
     fSize := FileSize(ffile);
     if fSize > High(inbuf) then SetLength(inbuf, fSize);
     BlockRead(ffile,inbuf[0],fSize);
     CloseFile(ffile);
     j := 0;
     GetGameFlag;
     if IsSpecSave then begin
      Memo1.Lines.Add('Special file - removed header blocks');
      j := 1048;
      IsAddon := true;
     end else begin
       BufMoveTo(1,50,'ZZZZ',j);
       isAddon := (j>1);
     end;
     temp    := ChangeFileExt(s,'.tmp');
     AssignFile(ffile,temp);
     Rewrite(ffile,1);
     if isAddon then begin
       app := 0;
       if IsSpecSave then begin
         BufMoveTo(1,fsize,'<m_NetIsHost>',app);
         app := app - 556;
         BlockWrite(ffile,inbuf[j+8],app-j-8,app);
         Memo1.Lines.Add('Version 1.02 save - removed uncompressed bytes');
       end else begin
         BufMoveTo(1,fsize,'<m_NetIsHost>',app);
         BlockWrite(ffile,inbuf[j+8],app-j-8,app);
         Memo1.Lines.Add('Version 1.02 save - removed uncompressed bytes');
      end;
     end else begin
       Memo1.Lines.Add('Version 1.00/01 save - removed header bytes');
       BlockWrite(ffile,inbuf[j+8],fsize-j-8,i);
     end;
     CloseFile(ffile);
   end;

   procedure AppendRest;
   var l : integer;
   begin
     AssignFile(ffile,t);
     Reset(ffile, 1);
     l := FileSize(ffile);
     Seek(ffile,l);
     BlockWrite(ffile,inbuf[app],fsize-app,i);
     CloseFile(ffile);
     Memo1.Lines.Add('Version 1.02 save - added uncompressed bytes');
   end;

begin
  RemoveHeader;             // get rid of startbytes (into file temp)
  Memo1.Lines.Add('Decompressing file...');
  t  := ExtractFileName(s);
  t  := ChangeFileExt(t,'.txt');
  t  := DataPath + t;         // decompress into file t
  ok := true;
  try
    InputStream         := TFileStream.Create(temp, fmOpenRead);
    OutputStream        := TFileStream.Create(t, fmCreate);
    DecompressionStream := TDecompressionStream.Create(InputStream);
    i := DecompressionStream.Read(Buffer,SizeOf(Buffer));
    q := 0;
    while (i > 0{and (q<70)} do begin
      OutputStream.Write(Buffer,i);
      inc(q);
      i := DecompressionStream.Read(Buffer,SizeOf(Buffer));
      //Memo1.Lines.Add('Decompressing file... '+inttostr(i)+ '  
'+inttostr(q));
    end;
  except
    ok := false;
  end;
  if ok then Memo1.Lines.Add('
File'+t+' created')
        else Memo1.Lines.Add('
File'+t+' failed decompression');
  DecompressionStream.Free;
  OutputStream.Free;
  InputStream.Free;
  DeleteFile(temp);        // remove temp file
  if IsAddon then AppendRest;
  if ok then s := t else s := '
';
end;


Für einen Delphi-Programmierer ist das sicherlich ein "Klacks" ...
Wäre dankbar für Unterstützung. Mein Projekt wird mit VB erzeugt und ich kann mit dem Code nichts anfangen (einige Syntaxe kann ich nicht interpretieren, und somit auch nicht umsetzten... *grmpf*)

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt
Moderiert von user profile iconChristian S.: Topic aus Freeware Projekte verschoben am So 29.03.2009 um 11:38
platzwart
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: So 29.03.09 11:47 
Hallo,

vlt bissl mehr Infos, was das Programm alles können soll. Der oben stehende Source-Code als Exe ist wohl äußerst sinnfrei... Welche Anforderungen gibt es bezüglich Oberfläche etc?!?

_________________
Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
nahpetsM Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: So 29.03.09 17:12 
Hallo,

was das Programm machen soll ist ja fast erkennbar :

Ein bestimmtes Savegame soll entpackt werden und eine darin enthaltene XML-Struktur als Textfile ausgegeben werden.
Die Anfoderung an die Oberfläche ? : Am besten gar keine --> Gamedata_writer.exe [FILE] --> Datei FILE.XML wird erstellt... oder aber mit simplen Window mit Explorer und "get GameData"-Button um die Datei zu erstellen...

Ist das schwierig ? Also in VB wäre das ja kein großer Aufwand, deswegen hoffte ich, daß sich diese Anfrage hier lohnen würde...

Gruss
Stephan
Garf
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 54
Erhaltene Danke: 2


D3Prof, D7PE, TDE
BeitragVerfasst: Do 02.04.09 18:30 
Das sieht aus wie aus einem Source Code rausgerissen. InBuf, OutBuf, BufMoveTo, IsSpecSave und DataPath sind erst einmal unbekannt. IsSpecSave und DataPath kann man sich denken. InBuf und OutBuf ebenfalls. OutBuf wird aber nirgends gefüllt und die Procedure/Function BufMoveTo fehlt.