diff --git a/src/tools/mapcvt.dpr b/src/tools/mapcvt.dpr
index cf4edc1692b956688ccad9778d2b0cb1da648c10..799de30e10e7e20f9c6361f85be69bd22c38bb05 100644 (file)
--- a/src/tools/mapcvt.dpr
+++ b/src/tools/mapcvt.dpr
{$INCLUDE ../shared/a_modes.inc}
{$INCLUDE ../shared/a_modes.inc}
-{$APPTYPE CONSOLE}
+{$IFDEF WINDOWS}
+ {$APPTYPE CONSOLE}
+{$ENDIF}
uses
SysUtils, Classes,
sfs in '../sfs/sfs.pas',
sfsPlainFS in '../sfs/sfsPlainFS.pas',
sfsZipFS in '../sfs/sfsZipFS.pas',
uses
SysUtils, Classes,
sfs in '../sfs/sfs.pas',
sfsPlainFS in '../sfs/sfsPlainFS.pas',
sfsZipFS in '../sfs/sfsZipFS.pas',
+ mempool in '../shared/mempool.pas',
xstreams in '../shared/xstreams.pas',
xparser in '../shared/xparser.pas',
xdynrec in '../shared/xdynrec.pas',
xprofiler in '../shared/xprofiler.pas',
utils in '../shared/utils.pas',
xstreams in '../shared/xstreams.pas',
xparser in '../shared/xparser.pas',
xdynrec in '../shared/xdynrec.pas',
xprofiler in '../shared/xprofiler.pas',
utils in '../shared/utils.pas',
+ hashtable in '../shared/hashtable.pas',
conbuf in '../shared/conbuf.pas',
e_log in '../engine/e_log.pas',
wadreader in '../shared/wadreader.pas',
conbuf in '../shared/conbuf.pas',
e_log in '../engine/e_log.pas',
wadreader in '../shared/wadreader.pas',
inname: AnsiString = '';
outname: AnsiString = '';
totext: Integer = -1; // <0: guess; force outname extension
inname: AnsiString = '';
outname: AnsiString = '';
totext: Integer = -1; // <0: guess; force outname extension
- sign: packed array[0..3] of AnsiChar;
+ //sign: packed array[0..3] of AnsiChar;
wad: TWADFile = nil;
waddata: Pointer;
waddlen: Integer;
wad: TWADFile = nil;
waddata: Pointer;
waddlen: Integer;
+ wasbin: Boolean = false;
+ lostdata: Boolean;
begin
if (ParamCount = 0) then
begin
begin
if (ParamCount = 0) then
begin
st := openDiskFileRO(inname);
end;
st := openDiskFileRO(inname);
end;
- st.ReadBuffer(sign, 4);
- st.position := 0;
- if (sign[0] = 'M') and (sign[1] = 'A') and (sign[2] = 'P') and (sign[3] = #1) then
- begin
- // binary map
- if (totext < 0) then begin outname := forceFilenameExt(outname, '.txt'); totext := 1; end;
- stt := curTimeMicro();
- map := dfmapdef.parseBinMap(st);
- stt := curTimeMicro()-stt;
- writeln('binary map parsed in ', stt div 1000, '.', stt mod 1000, ' milliseconds');
- st.Free();
- end
- else
- begin
- // text map
- if (totext < 0) then begin outname := forceFilenameExt(outname, '.map'); totext := 0; end;
- pr := TFileTextParser.Create(st);
- try
- stt := curTimeMicro();
- map := dfmapdef.parseMap(pr);
- stt := curTimeMicro()-stt;
- writeln('text map parsed in ', stt div 1000, '.', stt mod 1000, ' milliseconds');
- except on e: Exception do
+ try
+ stt := getTimeMicro();
+ map := dfmapdef.parseMap(st, @wasbin);
+ stt := getTimeMicro()-stt;
+ if wasbin then write('binary') else write('text');
+ writeln(' map parsed in ', stt div 1000, '.', stt mod 1000, ' milliseconds');
+ except
+ on e: TDynParseException do
begin
begin
- writeln('ERROR at (', pr.line, ',', pr.col, '): ', e.message);
+ writeln('ERROR at (', e.tokLine, ',', e.tokCol, '): ', e.message);
Halt(1);
end;
Halt(1);
end;
- end;
- pr.Free();
+ on E: Exception do
+ begin
+ writeln('ERROR: ', e.message);
+ Halt(1);
+ end;
+ end;
+
+ {$IF DEFINED(D2D_DYNREC_PROFILER)}xdynDumpProfiles();{$ENDIF}
+
+ if (totext < 0) then
+ begin
+ if wasbin then begin outname := forceFilenameExt(outname, '.txt'); totext := 1; end
+ else begin outname := forceFilenameExt(outname, '.map'); totext := 0; end;
end;
assert(totext >= 0);
end;
assert(totext >= 0);
if (totext = 0) then
begin
// write binary map
if (totext = 0) then
begin
// write binary map
- stt := curTimeMicro();
- map.writeBinTo(st);
- stt := curTimeMicro()-stt;
- writeln('binary map written in ', stt div 1000, '.', stt mod 1000, ' milliseconds');
+ lostdata := false;
+ stt := getTimeMicro();
+ map.writeBinTo(lostdata, st);
+ stt := getTimeMicro()-stt;
+ if lostdata then writeln('***WARNING! some data was lost due to binary format limitations!');
+ write('binary');
end
else
begin
// write text map
wr := TFileTextWriter.Create(st);
end
else
begin
// write text map
wr := TFileTextWriter.Create(st);
- stt := curTimeMicro();
+ stt := getTimeMicro();
map.writeTo(wr);
map.writeTo(wr);
- stt := curTimeMicro()-stt;
- writeln('text map written in ', stt div 1000, '.', stt mod 1000, ' milliseconds');
+ stt := getTimeMicro()-stt;
wr.Free();
wr.Free();
+ write('text');
end;
end;
+ writeln(' map written in ', stt div 1000, '.', stt mod 1000, ' milliseconds');
end.
end.