home *** CD-ROM | disk | FTP | other *** search
- Program Extract_Dark_Forces_GOB;
-
- var
- file1, file2 : file;
- buffer : array[0..32767] of byte;
- infile, outfile,lstfile : string;
- i : integer;
- directory : text;
- offset, len, dirbegin : longint;
- result : word;
- b : array[1..13] of byte;
- actlen : longint;
-
- begin
- if paramcount < 1 then
- begin
- writeLn('Usage: EXTR_GOB gobfile');
- halt;
- end;
- infile := paramstr(1);
- for i := 1 to length(infile) do
- infile[i] := upcase(infile[i]);
- if pos('.GOB', infile) = 0 then
- begin
- lstfile := infile + '.LST';
- infile := infile + '.GOB';
- end
- else
- begin
- lstfile := copy(infile, 1, length(infile) - 4) + '.LST';
- end;
- assign(file1, infile);
- {$I-}
- reset(file1,1);
- {$I+}
- if ioresult <> 0 then
- begin
- writeln('Datei ', infile, ' nicht gefunden.');
- halt;
- end;
- blockread(file1, dirbegin, 4, result);
- blockread(file1, dirbegin, 4, result);
- dirbegin := dirbegin + 4;
- assign(directory,lstfile);
- rewrite(directory);
- while dirbegin < filesize(file1) do
- begin
- seek(file1, dirbegin);
- blockread(file1, offset, 4, result);
- blockread(file1, len, 4, result);
- outfile := '';
- blockread (file1, b, 13, result);
- for i := 1 to 13 do
- if b[i] <> 0 then
- outfile := outfile + chr(b[i]);
- dirbegin := filepos(file1);
- seek(file1, offset);
- writeln(outfile);
- writeln(directory,outfile);
- assign(file2, outfile);
- rewrite(file2, 1);
- actlen := 0;
- while actlen < len do
- begin
- blockread(file1, buffer, 32768, result);
- if (actlen + 32768) > len then
- begin
- blockwrite(file2, buffer, len - actlen, result);
- actlen := len;
- end
- else
- begin
- blockwrite(file2, buffer, 32768, result);
- actlen := actlen + 32768;
- end;
- end;
- close(file2);
- end;
- close(file1);
- close(directory);
- end.
-
-