DEADSOFTWARE

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