DEADSOFTWARE

textmap: dramatically increased text map parsing speed (text map now parses in the...
[d2df-sdl.git] / src / tools / mapgen.dpr
1 {$INCLUDE ../shared/a_modes.inc}
2 {$IFDEF WINDOWS}
3 {$APPTYPE CONSOLE}
4 {$ENDIF}
6 uses
7 SysUtils, Classes,
8 xstreams in '../shared/xstreams.pas',
9 xparser in '../shared/xparser.pas',
10 xdynrec in '../shared/xdynrec.pas',
11 xprofiler in '../shared/xprofiler.pas',
12 utils in '../shared/utils.pas',
13 hashtable in '../shared/hashtable.pas',
14 conbuf in '../shared/conbuf.pas',
15 e_log in '../engine/e_log.pas';
18 // ////////////////////////////////////////////////////////////////////////// //
19 var
20 pr: TTextParser;
21 dfmapdef: TDynMapDef;
22 fo: TextFile;
23 st: TStream = nil;
24 ch: AnsiChar;
25 wdt: Integer;
26 s: AnsiString;
27 begin
28 //writeln(getFilenamePath(ParamStr(0)), '|');
30 e_InitWritelnDriver();
31 conbufDumpToStdOut := true;
32 conbufConPrefix := false;
34 writeln('parsing "mapdef.txt"...');
35 try
36 st := openDiskFileRO('mapdef.txt');
37 writeln('found: local mapdef');
38 except // sorry
39 st := nil;
40 end;
41 try
42 writeln(filenameConcat(getFilenamePath(ParamStr(0)), '../mapdef/mapdef.txt'), '|');
43 st := openDiskFileRO(filenameConcat(getFilenamePath(ParamStr(0)), '../mapdef/mapdef.txt'));
44 writeln('found: system mapdef');
45 except // sorry
46 writeln('FATAL: mapdef not found!');
47 end;
49 pr := TFileTextParser.Create(st, false); // don't own
50 try
51 dfmapdef := TDynMapDef.Create(pr);
52 except on e: Exception do
53 begin
54 writeln('ERROR at (', pr.line, ',', pr.col, '): ', e.message);
55 Halt(1);
56 end;
57 end;
58 pr.Free();
60 writeln('writing "mapdef.inc"...');
61 AssignFile(fo, 'mapdef.inc');
62 Rewrite(fo);
63 write(fo, '// *** WARNING! ***'#10);
64 write(fo, '// regenerate this part directly from "mapdef.txt" with ''mapgen'', NEVER manually change anything here!'#10#10#10);
65 write(fo, dfmapdef.pasdef);
67 //st := openDiskFileRO('mapdef.txt');
68 st.position := 0;
69 write(fo, #10#10'const defaultMapDef: AnsiString = ''''+'#10' ');
70 wdt := 2;
71 while true do
72 begin
73 if (st.Read(ch, 1) <> 1) then break;
74 s := formatstrf('#%d', [Byte(ch)]);
75 if (wdt+Length(s) > 78) then begin wdt := 2; write(fo, '+'#10' '); end;
76 write(fo, s);
77 Inc(wdt, Length(s));
78 end;
79 write(fo, #10';');
81 CloseFile(fo);
82 end.