blob: de9589c6cc876bc452e7d66d1db5b1a49b1760c9 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001// MorgenGrauen MUDlib
2//
3// secure/master/autoinclude.c -- module of the master object: Autoincludes
4//
5// $Id: master.c 7041 2008-10-13 18:18:27Z Zesstra $
6
7#define PRAGMA(x) "#pragma "x"\n"
8
9// fuer alte Homemuds...
10#if __VERSION__ >= "3.5.0"
11#define RTTCHECKS PRAGMA("rtt_checks")
12#define DEFAULTS PRAGMA("save_types")
13#else
14#define RTTCHECKS ""
15#define DEFAULTS PRAGMA("combine_strings, verbose_errors, warn_deprecated")
16#endif
17
18// geschachteltes Mapping in toplevel.region.magier Hierarchie.
19// Wichtig: jede Hierarchiebene _muss_ ein Mapping sein, welches einen Eintrag
20// 0 als Default enthaelt, welcher einen Strings als Wert hat.
21// Ausnahme: die letzte Ebene (Magierebene), die muss ein String ein.
22private nosave mapping autoincludes = ([
23 "d": ([
24 "inseln": ([
25 0: "",
26 "zesstra": PRAGMA("strong_types") RTTCHECKS,
27 ]),
28 0: "",
29 ]),
30 "std": ([
31 0: PRAGMA("strong_types,pedantic") RTTCHECKS,
32 ]),
33 "items": ([
34 0: PRAGMA("strong_types,pedantic") RTTCHECKS,
35 ]),
36 "secure": ([
37 0: PRAGMA("strong_types,range_check,pedantic") RTTCHECKS,
38 ]),
39 "p": ([
40 0: "",
41 "daemon": ([
42 0: PRAGMA("strong_types") RTTCHECKS
43 ]),
44 "service": ([
45 0: ""
46 ]),
47 ]),
48 0: DEFAULTS,
49]);
50
51string autoincludehook(string base_file, string current_file, int sys_include)
52{
53 mapping topleveldir, region; // mappings for spezialisiertere Pfade
54 string ainc_string;
55
56 // Wenn current_file != 0 ist, wird gerade vom kompilierten Objekt
57 // <base_file> etwas (indirekt) inkludiert. Dort duerfen die Pragmas
58 // keinesfalls reingeschrieben werden.
59 if (current_file)
60 return 0;
61
62 string res=autoincludes[0]; // global default.
63
64 string *p_arr = explode(base_file,"/")-({""});
65 //DEBUG(sprintf("AINC: File: %O, Pfad: %O\n",base_file, p_arr));
66
67 if (sizeof(p_arr) && m_contains(&topleveldir, autoincludes, p_arr[0])) {
68 // p_arr[0]: d, p, std, etc.
69 // erst wird der Defaulteintrag 0 genommen
70 res += topleveldir[0];
71 if (sizeof(p_arr) > 1 && m_contains(&region, topleveldir, p_arr[1])) {
72 // p_arr[1] ebene, polar, unterwelt, service, ...
73 // erst den Defaulteintrag der Region nehmen
74 res += region[0];
75 if (sizeof(p_arr) > 2 && m_contains(&ainc_string, region, p_arr[2])) {
76 // p_arr[2]: magiername. Fuer den Magier was hinterlegt.
77 res += ainc_string;
78 }
79 }
80 }
81 // Fuer aeltere Files schalten wir einige Warnungen explizit aus. :-(
82 // (1407179680 == "Mon, 4. Aug 2014, 21:14:40")
Zesstra085be172019-05-27 22:04:04 +020083 // Auf anderen Rechnern als dem Mudrechner werden die Warnungen nur
84 // eingeschaltet, wenn die Files seit dem Mudstart geaendert wurden.
85 // Hintergrund: bei kopierten Mudlibs werden oft die mtimes geaendert und
86 // dann scrollt auf einmal alles. Aber wenn man nach dem Mudstart was
87 // aendert, ist es vermutlich ne einzelne, gezielte Aenderung an einem File.
MG Mud User88f12472016-06-24 23:31:02 +020088#if MUDHOST == __HOST_NAME__
Zesstra085be172019-05-27 22:04:04 +020089 if (call_sefun("file_time", base_file) < 1407179680)
90#else
91 if (call_sefun("file_time", base_file) < __BOOT_TIME__)
92#endif
93 {
MG Mud User88f12472016-06-24 23:31:02 +020094 res += PRAGMA("no_warn_missing_return");
95 }
MG Mud User88f12472016-06-24 23:31:02 +020096 //DEBUG(res);
97 return res;
98}
99#undef RTTCHECKS
100#undef DEFAULTS
101#undef PRAGMA
102
103