annotate mde/setup/Init.d @ 137:9f035cd139c6

BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed. Content restrutured a lot: New IContent module, Content module includes more functionality. New ContentLoader module to manage content loading/saving/translation. Translation module moved to content dir and cut down to reflect current usage. File format unchanged except renames: FontOptions -> Font, VideoOptions -> Screen. Font render mode and LCD filter options are now enums. GUI loading needs to create content (and set type for enums), but doesn't save/load value. Some setup of mainSchedule moved to mde.mainLoop. Content callbacks are called on content change now. ContentLists are set up implicitly from content symbols. Not as fast but much easier! Bug-fix in the new MTTagReader. Renamed MT *Reader maker functions to avoid confusion in paths.d. New mde.setup.logger module to allow logger setup before any other module's static this().
author Diggory Hardy <diggory.hardy@gmail.com>
date Sat, 07 Feb 2009 12:46:03 +0000
parents 4084f07f2c7a
children e785e98d3b78
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
1 /* LICENSE BLOCK
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
2 Part of mde: a Modular D game-oriented Engine
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
3 Copyright © 2007-2008 Diggory Hardy
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
4
26
611f7b9063c6 Changed the licensing and removed a few dead files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 25
diff changeset
5 This program is free software: you can redistribute it and/or modify it under the terms
611f7b9063c6 Changed the licensing and removed a few dead files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 25
diff changeset
6 of the GNU General Public License as published by the Free Software Foundation, either
611f7b9063c6 Changed the licensing and removed a few dead files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 25
diff changeset
7 version 2 of the License, or (at your option) any later version.
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
8
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
9 This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
10 without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
11 See the GNU General Public License for more details.
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
12
26
611f7b9063c6 Changed the licensing and removed a few dead files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 25
diff changeset
13 You should have received a copy of the GNU General Public License
611f7b9063c6 Changed the licensing and removed a few dead files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 25
diff changeset
14 along with this program. If not, see <http://www.gnu.org/licenses/>. */
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
15
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
16 /**************************************************************************************************
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
17 * Initialisation and cleanup (shutdown) module.
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
18 *
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
19 * Program startup follows this sequence: static this() functions, pre-init, init.
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
20 * Shutdown consists of: cleanup, post-cleanup, static ~this() functions.
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
21 *
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
22 * static this and ~this functions should not use any external resources, such as dynamically
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
23 * loaded libraries or files, and should not interact with other modules. They should be almost
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
24 * guaranteed not to fail. Preferably, they shouldn't involve large amounts of memory or
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
25 * processing, but this is not a requirement.
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
26 *
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
27 * Pre-init: init code written in this module. Generally only prerequisets of most other stages
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
28 * go here.
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
29 *
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
30 * Init: This is where init code from external modules gets hooked in. Each stage consists of an
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
31 * initialization function, a corresponding cleanup function, a state, and any dependencies (other
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
32 * init functions which must be run before this one). Init functions are run according to these
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
33 * dependencies, potentially threaded simultaeneously with other init functions.
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
34 *
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
35 * Cleanup: Cleanup happens similarly to init for all stages requiring shutdown (according to their
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
36 * state). The init dependencies are applied in reverse order (so if X depended on Y, Y's cleanup
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
37 * will not run until X's cleanup has completed), and again the functions may be threaded.
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
38 *
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
39 * Post-cleanup: like pre-init, this is code written in Init.
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
40 *************************************************************************************************/
63
66d555da083e Moved many modules/packages to better reflect usage.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 56
diff changeset
41 module mde.setup.Init;
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
42
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
43 import mde.setup.InitStage; // Controls external delegates run by init
63
66d555da083e Moved many modules/packages to better reflect usage.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 56
diff changeset
44 import mde.setup.exception;
137
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
45 import mde.setup.logger;
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
46
137
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
47 import mde.content.AStringContent;
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
48 import mde.content.ContentLoader;
134
7ababdf97748 Moved mde.setup.paths to mde.file.paths and paths.mdeReader to mde.file.mergetag.Reader.MTMultiReader.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 132
diff changeset
49 import paths = mde.file.paths;
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
50 import mde.exception; // optionsLoadException
127
3328c6fb77ca 2 fixes for ldc - not that I was able to compile anyway (x86_64).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
51 import imde = mde.imde;
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
52
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
53 // tango imports
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
54 import tango.core.Thread;
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
55 import tango.core.sync.Condition;
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
56 import tango.core.Exception;
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 89
diff changeset
57 import tango.util.container.LinkedList;
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
58
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
59 //import tango.stdc.stringz : fromStringz;
53
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
60 import tango.io.Console; // for printing command-line usage
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
61 import TimeStamp = tango.text.convert.TimeStamp, tango.time.WallClock; // output date in log file
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
62 import tango.util.Arguments;
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
63 import tango.util.log.Log;
67
108d123238c0 Changes to work with tango r3700 (post 0.99.6).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 64
diff changeset
64 import tango.util.log.AppendConsole;
108d123238c0 Changes to work with tango r3700 (post 0.99.6).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 64
diff changeset
65 import tango.util.log.AppendFiles;
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
66
29
f985c28c0ec9 A new GUI widget plus changes to the init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 28
diff changeset
67 // Derelict imports
f985c28c0ec9 A new GUI widget plus changes to the init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 28
diff changeset
68 import derelict.opengl.gl;
f985c28c0ec9 A new GUI widget plus changes to the init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 28
diff changeset
69 import derelict.sdl.sdl;
56
f9f5e04f20b2 Bit of polish for a public release, including some more documentation.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 55
diff changeset
70 //import derelict.sdl.image; Was to be used... for now isn't
30
467c74d4804d Major changes to the scheduler, previously only used by the main loop.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 29
diff changeset
71 import derelict.freetype.ft;
29
f985c28c0ec9 A new GUI widget plus changes to the init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 28
diff changeset
72 import derelict.util.exception;
f985c28c0ec9 A new GUI widget plus changes to the init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 28
diff changeset
73
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
74
137
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
75 /******************************************************************************
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
76 * Init class
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
77 *
137
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
78 * A scope class created at beginning of the program and destroyed at the end;
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
79 * thus the CTOR handles program initialisation and the DTOR handles program
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
80 * cleanup.
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
81 *****************************************************************************/
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
82 scope class Init
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
83 {
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
84 static this() {
63
66d555da083e Moved many modules/packages to better reflect usage.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 56
diff changeset
85 logger = Log.getLogger ("mde.setup.Init");
137
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
86 exitImmediately = new BoolContent ("MiscOptions.exitImmediately");
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
87 maxThreads = new IntContent ("MiscOptions.maxThreads");
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
88 logLevel = new EnumContent ("MiscOptions.logLevel",
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
89 ["Trace", "Info", "Warn", "Error", "Fatal", "None"]);
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
90 logOutput = new EnumContent ("MiscOptions.logOutput",
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
91 ["none", "console", "file", "both"]);
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
92 }
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
93
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
94 /** this() − pre-init and init */
53
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
95 this(char[][] cmdArgs)
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
96 {
137
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
97 /**********************************************************************
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
98 * Pre-init - init code written in this module.
137
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
99 *********************************************************************/
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
100 debug logger.trace ("Init: starting pre-init");
53
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
101 //FIXME: warn on invalid arguments, including base-path on non-Windows
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
102 // But Arguments doesn't support this (in tango 0.99.6 and in r3563).
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
103 Arguments args;
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
104 try {
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
105 args = new Arguments();
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
106 args.define("base-path").parameters(1);
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
107 args.define("data-path").parameters(1,-1);
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
108 args.define("conf-path").parameters(1,-1);
135
bc697a218716 Somewhat unified path lookup between linux and windows and added font paths.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 134
diff changeset
109 args.define("font-path").parameters(1,-1);
53
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
110 args.define("paths");
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
111 args.define("q").aliases(["quick-exit"]);
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
112 args.define("help").aliases(["h"]);
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
113 args.parse(cmdArgs);
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
114 if (args.contains("help")) // lazy way to print help
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
115 throw new InitException ("Help requested"); // and stop
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
116 } catch (Exception e) {
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
117 printUsage(cmdArgs[0]);
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
118 throw new InitException ("Parsing arguments failed: "~e.msg);
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
119 }
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
120
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
121 // Find/create paths:
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
122 try {
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
123 if (args.contains("data-path"))
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
124 paths.extraDataPath = args["data-path"];
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
125 if (args.contains("conf-path"))
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
126 paths.extraConfPath = args["conf-path"];
135
bc697a218716 Somewhat unified path lookup between linux and windows and added font paths.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 134
diff changeset
127 if (args.contains("font-path"))
bc697a218716 Somewhat unified path lookup between linux and windows and added font paths.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 134
diff changeset
128 paths.addFontPath (args["font-path"]);
bc697a218716 Somewhat unified path lookup between linux and windows and added font paths.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 134
diff changeset
129
53
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
130 if (args.contains("base-path"))
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
131 paths.resolvePaths (args["base-path"]);
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
132 else
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
133 paths.resolvePaths();
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
134 } catch (Exception e) {
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
135 throw new InitException ("Resolving paths failed: " ~ e.msg);
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
136 }
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
137 if (args.contains("paths")) {
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
138 paths.mdeDirectory.printPaths;
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
139 throw new InitException ("Paths requested"); // lazy way to stop
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
140 }
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
141 debug logger.trace ("Init: resolved paths successfully");
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
142
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
143 /* Load options now. Don't load in a thread since:
53
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
144 * Loading should be fast & most work is probably disk access
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
145 * It enables logging to be controlled by options
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
146 * It's a really good idea to let the options apply to all other loading */
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
147 try {
137
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
148 ContentLoader.load();
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
149 } catch (Exception e) {
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
150 throw new InitException ("Loading options (content values) failed: " ~ e.msg);
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
151 }
53
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
152 debug logger.trace ("Init: loaded options successfully");
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
153
53
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
154 // Set up the logger:
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
155 Logger root;
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
156 try {
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
157 // Where logging is done to is determined at compile-time, currently just via static ifs.
67
108d123238c0 Changes to work with tango r3700 (post 0.99.6).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 64
diff changeset
158 root = Log.root;
108d123238c0 Changes to work with tango r3700 (post 0.99.6).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 64
diff changeset
159 root.clear; // we may no longer want to log to the console
53
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
160
115
1b1e2297e2fc Enums handled more generically now via either a popup list or flat list of BoolContentWidgets.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 103
diff changeset
161 // Now re-set the logging level and add callback to set on change:
1b1e2297e2fc Enums handled more generically now via either a popup list or flat list of BoolContentWidgets.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 103
diff changeset
162 setLogLevel ();
137
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
163 logLevel.addCallback (&setLogLevel);
53
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
164
137
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
165 if (logOutput() & 2) { // first appender so root seperator messages don't show on console
98
49e7cfed4b34 All types of Option have been converted to use ValueContent classes, and their values can be displayed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 95
diff changeset
166 // Use 2 log files with a maximum size of 16kiB:
49e7cfed4b34 All types of Option have been converted to use ValueContent classes, and their values can be displayed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 95
diff changeset
167 root.add (new AppendFiles (paths.logDir~"/log-.txt", 2, 16*1024));
49e7cfed4b34 All types of Option have been converted to use ValueContent classes, and their values can be displayed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 95
diff changeset
168 root.append (Level.None, ""); // some kind of separation between runs
49e7cfed4b34 All types of Option have been converted to use ValueContent classes, and their values can be displayed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 95
diff changeset
169 root.append (Level.None, "");
53
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
170 }
137
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
171 if (logOutput() & 1)
67
108d123238c0 Changes to work with tango r3700 (post 0.99.6).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 64
diff changeset
172 root.add(new AppendConsole);
53
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
173 logger.info ("Starting mde [no version] on " ~ TimeStamp.toString(WallClock.now));
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
174 } catch (Exception e) {
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
175 // Presumably it was only adding a file appender which failed; set up a new console
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
176 // logger and if that fails let the exception kill the program.
67
108d123238c0 Changes to work with tango r3700 (post 0.99.6).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 64
diff changeset
177 root.clear;
108d123238c0 Changes to work with tango r3700 (post 0.99.6).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 64
diff changeset
178 root.add (new AppendConsole);
53
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
179 logger.warn ("Exception while setting up the logger; logging to the console instead.");
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
180 }
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
181
53
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
182 // a debugging option:
137
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
183 imde.run = !args.contains("q") && !exitImmediately();
53
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
184 debug logger.trace ("Init: applied pre-init options");
29
f985c28c0ec9 A new GUI widget plus changes to the init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 28
diff changeset
185
f985c28c0ec9 A new GUI widget plus changes to the init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 28
diff changeset
186 //BEGIN Load dynamic libraries
f985c28c0ec9 A new GUI widget plus changes to the init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 28
diff changeset
187 /* Can be done by init functions but much neater to do here.
f985c28c0ec9 A new GUI widget plus changes to the init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 28
diff changeset
188 * Also means that init functions aren't run if a library fails to load. */
f985c28c0ec9 A new GUI widget plus changes to the init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 28
diff changeset
189 try {
f985c28c0ec9 A new GUI widget plus changes to the init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 28
diff changeset
190 DerelictSDL.load();
56
f9f5e04f20b2 Bit of polish for a public release, including some more documentation.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 55
diff changeset
191 // SDLImage was going to be used... for now it isn't because of gl texturing problems
f9f5e04f20b2 Bit of polish for a public release, including some more documentation.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 55
diff changeset
192 //DerelictSDLImage.load();
29
f985c28c0ec9 A new GUI widget plus changes to the init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 28
diff changeset
193 DerelictGL.load();
30
467c74d4804d Major changes to the scheduler, previously only used by the main loop.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 29
diff changeset
194 DerelictFT.load();
29
f985c28c0ec9 A new GUI widget plus changes to the init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 28
diff changeset
195 } catch (DerelictException de) {
f985c28c0ec9 A new GUI widget plus changes to the init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 28
diff changeset
196 logger.fatal ("Loading dynamic library failed:");
f985c28c0ec9 A new GUI widget plus changes to the init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 28
diff changeset
197 logger.fatal (de.msg);
f985c28c0ec9 A new GUI widget plus changes to the init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 28
diff changeset
198
f985c28c0ec9 A new GUI widget plus changes to the init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 28
diff changeset
199 throw new InitException ("Loading dynamic libraries failed (see above).");
f985c28c0ec9 A new GUI widget plus changes to the init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 28
diff changeset
200 }
53
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
201 debug logger.trace ("Init: dynamic libraries loaded");
29
f985c28c0ec9 A new GUI widget plus changes to the init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 28
diff changeset
202 //END Load dynamic libraries
f985c28c0ec9 A new GUI widget plus changes to the init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 28
diff changeset
203
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
204
137
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
205 /**********************************************************************
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
206 * Init − where init code from external modules gets hooked in.
137
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
207 *********************************************************************/
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
208 debug logger.trace ("Init: done pre-init, starting init stages");
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
209
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
210 // Calculate reverse dependencies of stages:
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
211 foreach (key,stage_p; stages)
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
212 foreach (name; stage_p.depends)
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
213 stages[name].rdepends ~= key;
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
214
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
215 runStages!(true); // startup delegates
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
216
24
32eff0e01c05 Only locally-changed options are stored in user-config now. Log levels revised.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 21
diff changeset
217 debug logger.trace ("Init: done");
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
218 }
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
219
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
220 /** DTOR - runs cleanup functions. */
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
221 ~this()
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
222 {
24
32eff0e01c05 Only locally-changed options are stored in user-config now. Log levels revised.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 21
diff changeset
223 debug logger.trace ("Cleanup: starting");
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
224
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
225 runStages!(false); // cleanup delegates
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
226
137
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
227 ContentLoader.save(); // save options before exiting
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
228
24
32eff0e01c05 Only locally-changed options are stored in user-config now. Log levels revised.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 21
diff changeset
229 debug logger.trace ("Cleanup: done");
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
230 }
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
231
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
232 // run init stages or cleanup if startup is false
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
233 private static void runStages(bool startup) () {
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 89
diff changeset
234 auto toRun = new LinkedList!(InitStage*);
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
235 foreach (v; stages) {
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
236 // Filter only stages with the relevant delegate. It is not checked later that the
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
237 // delegate exists!
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
238 // If no init/cleanup function exists, implicit activation/deactivation can occur so
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
239 // that dependents/dependencies may activate/deactivate.
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
240 static if (startup) {
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
241 if (v.state == StageState.INACTIVE) {
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
242 if ((*v).init)
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
243 toRun.append (v);
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
244 else
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
245 v.state = StageState.ACTIVE;
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
246 }
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
247 } else {
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
248 if (v.state == StageState.ACTIVE) {
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
249 if (v.cleanup)
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
250 toRun.append (v);
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
251 else
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
252 v.state = StageState.INACTIVE;
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
253 }
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
254 }
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
255 }
89
97e6dce08037 Solved some/removed some obsolete jobs/FIXMEs (excluding from gui code). General cleanup.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 88
diff changeset
256 // Counts number of active threads, and before threads are started is number to use:
137
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
257 size_t numWorking = (toRun.size < maxThreads()) ? toRun.size : maxThreads();
88
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
258 enum STATE { WORKING = 0, DONE = 1, ABORT = 2 }
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
259 STATE doneInit = STATE.WORKING;
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
260 Mutex toRunM = new Mutex; // synchronization on toRun, numWorking
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
261 Condition toRunC = new Condition(toRunM); // used by threads waiting for remaining stages' dependencies to be met
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
262
95
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
263 /* initThreadFct is now in a class to allow reliably identifying whcich instance is run in the main thread.
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
264 * The main thread gets index 0, other threads indexes 2,3,4,etc. (there is no 1). */
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
265 class InitStageThread : Thread {
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
266 this (int n) {
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
267 debug threadNum = n;
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
268 super (&initThreadFct);
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
269 }
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
270 debug int threadNum;
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
271 /* This is a threadable member function to run init stages.
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
272 * Operation follows:
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
273 * 1 Look for a stage to run:
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
274 * if found:
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
275 * notify waiting threads work may be available
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
276 * init stage
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
277 * goto 1
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
278 * if not found:
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
279 * if any other threads are working, wait (dependencies may not be met yet)
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
280 * if no other threads are working, notify waiting threads and terminate (finished)
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
281 * When notified, threads start at 1. */
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
282 void initThreadFct () {
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
283 try { // created as a thread - must not throw exceptions
88
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
284 InitStage* stage;
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
285
88
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
286 threadLoop:
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
287 while (true) { // thread loops until a problem occurs or nothing else can be done
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
288 // Look for a job:
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
289 synchronized (toRunM) {
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
290 --numWorking; // stopped working: looking/waiting for a job
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
291 if (doneInit) break threadLoop; // something went wrong in another thread
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
292
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
293 static if (startup)
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
294 int num_rdepends = (stage is null) ? 0 : stage.rdepends.length;
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
295 else
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
296 int num_rdepends = (stage is null) ? 0 : stage.depends.length;
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
297
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
298 getStage:
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
299 while (true) {
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 89
diff changeset
300 auto toRunIt = toRun.iterator; // iterates toRun
88
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
301 itStages:
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 89
diff changeset
302 while (toRunIt.next (stage)) { // get next element of toRun
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 89
diff changeset
303 debug assert (stage !is null, "stage is null");
88
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
304 static if (startup) {
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
305 foreach (d; stage.depends)
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
306 if (stages[d].state != StageState.ACTIVE)
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
307 continue itStages; // dependency isn't met (yet)
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
308 } else {
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
309 foreach (d; stage.rdepends)
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
310 if (stages[d].state != StageState.INACTIVE)
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
311 continue itStages; // reverse dependency isn't unmet (yet)
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
312 }
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
313
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
314 // All dependencies met
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
315 debug assert (toRun.size, "toRun is empty (error with iterator)");
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
316 toRunIt.remove;
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
317 break getStage;
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
318 }
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
319
88
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
320 // No stage remaining with all dependencies met
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
321 if (toRun.size && numWorking) // still some working so more dependencies may be met later
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
322 toRunC.wait; // wait until another thread finishes
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
323 else // no thread is working, so none of what's left is doable, or nothing's left
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
324 break threadLoop;
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
325 }
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
326 ++numWorking; // got a job!
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
327 if (num_rdepends > 2) // how many stages depended on the last one run?
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
328 toRunC.notifyAll(); // tell all waiting threads there may be work now
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
329 else if (num_rdepends == 2)
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
330 toRunC.notify(); // there's potentially work for this thread and one other
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
331 // else there won't be additional work so don't notify
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
332 }
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
333
88
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
334 // Do a job:
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
335 try {
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 89
diff changeset
336 static if (startup) {
95
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
337 debug logger.trace ("({}) InitStage {}: starting init", threadNum, stage.name);
132
264028f4115a Cleaned up mde.imde and a couple of widget functions.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 127
diff changeset
338 stage.state = (*stage).init(); // init is a property too :-(
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 89
diff changeset
339 } else {
95
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
340 debug logger.trace ("({}) InitStage {}: starting cleanup", threadNum, stage.name);
88
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
341 stage.state = stage.cleanup();
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 89
diff changeset
342 }
95
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
343 debug logger.trace ("({}) InitStage {}: completed; state: {}", threadNum, stage.name, stage.state);
88
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
344 } catch (InitStageException e) {
132
264028f4115a Cleaned up mde.imde and a couple of widget functions.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 127
diff changeset
345 debug logger.error ("({}) InitStage {}: failed: "~e.msg, threadNum, stage.name);
264028f4115a Cleaned up mde.imde and a couple of widget functions.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 127
diff changeset
346 else logger.error ("InitStage {}: failed: "~e.msg, stage.name);
88
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
347 stage.state = e.state;
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
348 doneInit = STATE.ABORT;
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
349 break threadLoop;
88
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
350 } catch (Exception e) {
132
264028f4115a Cleaned up mde.imde and a couple of widget functions.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 127
diff changeset
351 debug logger.error ("({}) InitStage {}: failed: "~e.msg, threadNum, stage.name);
264028f4115a Cleaned up mde.imde and a couple of widget functions.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 127
diff changeset
352 else logger.error ("InitStage {}: failed: "~e.msg, stage.name);
88
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
353 doneInit = STATE.ABORT;
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
354 break threadLoop;
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
355 }
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
356 }
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
357 } catch (Exception e) {
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
358 logger.fatal ("Exception in initThreadFct: "~e.msg);
88
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
359 doneInit = STATE.ABORT;
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
360 }
88
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
361 doneInit |= STATE.DONE; // allow other threads a faster exit
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
362 toRunC.notifyAll(); // Most likely if we're exiting, we should make sure others aren't waiting.
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
363 return;
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
364 }
95
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
365 }
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
366
89
97e6dce08037 Solved some/removed some obsolete jobs/FIXMEs (excluding from gui code). General cleanup.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 88
diff changeset
367 // Start min(miscOpts.maxThreads,toRun.size)-1 threads:
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
368 try {
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
369 ThreadGroup g = new ThreadGroup;
95
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
370 InitStageThread x;
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
371 for (size_t i = numWorking; i > 1; --i) {
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
372 //g.create (&initThreadFct);
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
373 x = new InitStageThread (i);
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
374 x.start;
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
375 g.add (x);
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
376 }
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
377 x = new InitStageThread (0);
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
378 x.initThreadFct(); // also run in current thread
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
379 g.joinAll (false); // don't rethrow exceptions - there SHOULD NOT be any
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
380 } catch (ThreadException e) {
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
381 logger.error ("Exception while using threads: "~e.msg);
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
382 logger.error ("Disabling threads and attempting to continue.");
137
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
383 maxThreads = 1; // count includes current thread
95
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
384 auto x = new InitStageThread (0);
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
385 x.initThreadFct(); // try with just this thread
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
386 } // any other exception will be caught in main() and abort program
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
387
88
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
388 if (doneInit & STATE.ABORT)
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
389 throw new InitException ("An init/cleanup function failed (see above message(s))");
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
390
88
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
391 if (toRun.size)
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
392 foreach (stage; toRun)
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 89
diff changeset
393 logger.warn ("InitStage {}: was not run due to unmet dependencies", stage.name);
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
394 }
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
395
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
396 private static {
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
397 Logger logger;
137
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
398 BoolContent exitImmediately;
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
399 IntContent maxThreads;
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
400 EnumContent logLevel, logOutput;
53
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
401
137
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
402 // Callback on logLevel
115
1b1e2297e2fc Enums handled more generically now via either a popup list or flat list of BoolContentWidgets.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 103
diff changeset
403 void setLogLevel (Content = null) {
137
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
404 Log.root.level (logOutput() == 0 ? Level.None : cast(Level) logLevel(), true);
115
1b1e2297e2fc Enums handled more generically now via either a popup list or flat list of BoolContentWidgets.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 103
diff changeset
405 }
1b1e2297e2fc Enums handled more generically now via either a popup list or flat list of BoolContentWidgets.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 103
diff changeset
406
53
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
407 void printUsage (char[] progName) {
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
408 Cout ("mde [no version]").newline;
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
409 Cout ("Usage:").newline;
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
410 Cout (progName ~ ` [options]`).newline;
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
411 version(Windows)
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
412 Cout (
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
413 ` --base-path path Use path as the base (install) path (Windows only). It
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
414 should contain the "data" directory.`).newline;
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
415 Cout (
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
416 ` --data-path path(s) Add path(s) as a potential location for data files.
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
417 First path argument becomes the preffered location to
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
418 load data files from.
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
419 --conf-path path(s) Add path(s) as a potential location for config files.
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
420 Configuration in the first path given take highest
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
421 priority.
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
422 --paths Print all paths found and exit.
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
423 --quick-exit, -q Exit immediately, without entering main loop.
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
424 --help, -h Print this message.`).newline;
f000d6cd0f74 Changes to paths, command line arguments and font LCD rendering.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
425 }
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
426 }
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
427
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
428 debug (mdeUnitTest) unittest {
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
429 auto realInit = stages; // backup the real init stages
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
430 stages = new typeof(stages); // an empty test-bed
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
431
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
432 bool init1, init2, init3 = true;
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
433 StageState s1InitReturns = StageState.ACTIVE;
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
434 addInitStage ("stg1", delegate StageState() {
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
435 init1 = true;
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
436 return s1InitReturns;
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
437 }, delegate StageState() {
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
438 init1 = false;
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
439 return StageState.INACTIVE;
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
440 });
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
441 addInitStage ("stg2", delegate StageState() {
88
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
442 assert (init1);
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
443 init2 = true;
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
444 return StageState.ACTIVE;
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
445 }, delegate StageState() {
88
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
446 assert (init1);
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
447 init2 = false;
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
448 return StageState.INACTIVE;
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
449 }, ["stg1"]);
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
450 InitStage s3;
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
451 s3.init = delegate StageState() {
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
452 throw new InitStageException (cast(StageState)7); // not a normal state, but good for a test
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
453 return StageState.ERROR;
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
454 };
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
455 s3.cleanup = delegate StageState() {
88
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
456 assert (init1);
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
457 init3 = false;
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
458 return StageState.INACTIVE;
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
459 };
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
460 s3.depends = [ toStageName("stg1") ];
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
461 s3.state = StageState.ACTIVE; // already active, so s3.init should not run (first time)
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
462 addInitStage ("stg3", &s3);
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
463
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
464 // Stuff normally done in Init.this():
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
465 // Calculate reverse dependencies of stages:
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
466 foreach (key,stage_p; stages)
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
467 foreach (name; stage_p.depends)
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
468 stages[name].rdepends ~= key;
137
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
469 int realMaxThreads = maxThreads();
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
470 maxThreads = 4; // force up to 4 threads for unittest
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
471
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 89
diff changeset
472 logger.level(Logger.Info); // hide a lot of trace messages
136
4084f07f2c7a Added simpler mergetag readers and writers, with unittest.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 135
diff changeset
473 logger.info ("You should see some messages about InitStages not run/failing:");
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
474 // Run the above.
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
475 runStages!(true);
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
476 assert (init1);
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
477 assert (init2);
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
478 foreach (s; stages)
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
479 assert (s.state == StageState.ACTIVE);
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
480
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
481 runStages!(false);
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
482 assert (!init1);
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
483 assert (!init2);
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
484 assert (!init3);
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
485 foreach (s; stages)
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
486 assert (s.state == StageState.INACTIVE);
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
487
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
488 s1InitReturns = StageState.ERROR;
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
489 // Run again. S2/S3 shouldn't run, S1 won't shut down
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
490 runStages!(true);
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
491 assert (init1);
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
492 assert (!init2);
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
493 assert (!init3);
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
494 runStages!(false);
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
495 assert (init1); // S1 cleanup won't run
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
496
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
497 stages[toStageName("stg1")].state = StageState.INACTIVE; // hack it back so we can still test
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
498 s1InitReturns = StageState.ACTIVE;
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
499 init1 = false;
88
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
500 bool a1 = false;
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
501 try {
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
502 runStages!(true);
88
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
503 a1 = true;
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
504 } catch (Exception e) {}
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
505 assert (!a1, "runStages didn't throw");
01f4f5f1acc9 Changes to init and to allow compiling with gdc.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 86
diff changeset
506 assert (init1); // s1.init should run first; s2.init may or may not get run
85
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
507 assert (stages[toStageName("stg3")].state == cast(StageState)7); // set by the exception
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
508
56c0ddd90193 Intermediate commit (not stable). Changes to init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
509 stages = realInit; // restore the real init stages
137
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
510 maxThreads = realMaxThreads;
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
511 logger.info ("Unittest complete.");
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
512 }
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
513 }