diff --git a/src/tools/mapcvt.dpr b/src/tools/mapcvt.dpr
index cd02ab9b5d1c4fdf259d4bd281345745eb6bdccb..de1c0a36427acbfc0d0d6e84b07ea8c8230228f7 100644 (file)
--- a/src/tools/mapcvt.dpr
+++ b/src/tools/mapcvt.dpr
{$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',
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',
MAPDEF in '../shared/MAPDEF.pas';
outname: AnsiString = '';
totext: Integer = -1; // <0: guess; force outname extension
sign: packed array[0..3] of AnsiChar;
+ wad: TWADFile = nil;
+ waddata: Pointer;
+ waddlen: Integer;
begin
if (ParamCount = 0) then
begin
if (ParamCount = 1) then
begin
outname := forceFilenameExt(ParamStr(1), '');
+ if isWadPath(outname) then
+ begin
+ outname := SFSReplacePathDelims(g_ExtractFilePathName(outname), '/');
+ if (Length(outname) = 0) then begin writeln('FATAL: can''t guess output name!'); Halt(1); end;
+ end;
end
else
begin
end;
//writeln('outname: [', outname, ']; totext=', totext);
+ e_InitWritelnDriver();
+ conbufDumpToStdOut := true;
+ conbufConPrefix := false;
+
writeln('parsing "mapdef.txt"...');
//pr := TFileTextParser.Create('mapdef.txt');
pr := TStrTextParser.Create(defaultMapDef);
end;
writeln('parsing "', inname, '"...');
- st := openDiskFileRO(inname);
+
+ if isWadPath(inname) then
+ begin
+ wad := TWADFile.Create();
+ wad.ReadFile(g_ExtractWadName(inname));
+ wad.GetMapResource(g_ExtractFilePathName(inname), waddata, waddlen);
+ st := TSFSMemoryChunkStream.Create(waddata, waddlen, true);
+ wad.Free();
+ end
+ else
+ begin
+ 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
stt := curTimeMicro();
map := dfmapdef.parseBinMap(st);
stt := curTimeMicro()-stt;
- writeln('binary map parsed in ', stt div 1000, '.', stt mod 1000, ' microseconds');
+ writeln('binary map parsed in ', stt div 1000, '.', stt mod 1000, ' milliseconds');
+ st.Free();
end
else
begin
stt := curTimeMicro();
map := dfmapdef.parseMap(pr);
stt := curTimeMicro()-stt;
- writeln('text map parsed in ', stt div 1000, '.', stt mod 1000, ' microseconds');
+ writeln('text map parsed in ', stt div 1000, '.', stt mod 1000, ' milliseconds');
except on e: Exception do
begin
writeln('ERROR at (', pr.line, ',', pr.col, '): ', e.message);
pr.Free();
end;
+ {$IF DEFINED(D2D_DYNREC_PROFILER)}xdynDumpProfiles();{$ENDIF}
+
assert(totext >= 0);
writeln('writing "', outname, '"...');
stt := curTimeMicro();
map.writeBinTo(st);
stt := curTimeMicro()-stt;
- writeln('binary map written in ', stt div 1000, '.', stt mod 1000, ' microseconds');
+ writeln('binary map written in ', stt div 1000, '.', stt mod 1000, ' milliseconds');
end
else
begin
stt := curTimeMicro();
map.writeTo(wr);
stt := curTimeMicro()-stt;
- writeln('text map written in ', stt div 1000, '.', stt mod 1000, ' microseconds');
+ writeln('text map written in ', stt div 1000, '.', stt mod 1000, ' milliseconds');
wr.Free();
end;
end.