blob: bc6ecd0104e1157f5b79def56a4e8319ef03815f [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
MG Mud User88f12472016-06-24 23:31:02 +02009#define RTTCHECKS PRAGMA("rtt_checks")
Zesstra9b788912021-05-08 12:00:37 +020010#define DEFAULTS PRAGMA("save_types,warn_unused_variables,\
11 warn_applied_functions,warn_dead_code")
MG Mud User88f12472016-06-24 23:31:02 +020012
13// geschachteltes Mapping in toplevel.region.magier Hierarchie.
14// Wichtig: jede Hierarchiebene _muss_ ein Mapping sein, welches einen Eintrag
15// 0 als Default enthaelt, welcher einen Strings als Wert hat.
16// Ausnahme: die letzte Ebene (Magierebene), die muss ein String ein.
17private nosave mapping autoincludes = ([
18 "d": ([
19 "inseln": ([
20 0: "",
21 "zesstra": PRAGMA("strong_types") RTTCHECKS,
22 ]),
23 0: "",
24 ]),
25 "std": ([
Zesstraac5b06f2019-11-26 21:20:03 +010026 0: PRAGMA("strong_types") RTTCHECKS,
MG Mud User88f12472016-06-24 23:31:02 +020027 ]),
28 "items": ([
Zesstraac5b06f2019-11-26 21:20:03 +010029 0: PRAGMA("strong_types") RTTCHECKS,
MG Mud User88f12472016-06-24 23:31:02 +020030 ]),
31 "secure": ([
Zesstraac5b06f2019-11-26 21:20:03 +010032 0: PRAGMA("strong_types,range_check") RTTCHECKS,
MG Mud User88f12472016-06-24 23:31:02 +020033 ]),
34 "p": ([
35 0: "",
36 "daemon": ([
37 0: PRAGMA("strong_types") RTTCHECKS
38 ]),
39 "service": ([
40 0: ""
41 ]),
42 ]),
43 0: DEFAULTS,
44]);
45
46string autoincludehook(string base_file, string current_file, int sys_include)
47{
48 mapping topleveldir, region; // mappings for spezialisiertere Pfade
49 string ainc_string;
50
51 // Wenn current_file != 0 ist, wird gerade vom kompilierten Objekt
52 // <base_file> etwas (indirekt) inkludiert. Dort duerfen die Pragmas
53 // keinesfalls reingeschrieben werden.
54 if (current_file)
55 return 0;
56
57 string res=autoincludes[0]; // global default.
58
59 string *p_arr = explode(base_file,"/")-({""});
60 //DEBUG(sprintf("AINC: File: %O, Pfad: %O\n",base_file, p_arr));
61
62 if (sizeof(p_arr) && m_contains(&topleveldir, autoincludes, p_arr[0])) {
Zesstra0d7c6482021-05-07 09:44:56 +020063 // p_arr[0]: d, p, std, etc.
MG Mud User88f12472016-06-24 23:31:02 +020064 // erst wird der Defaulteintrag 0 genommen
65 res += topleveldir[0];
66 if (sizeof(p_arr) > 1 && m_contains(&region, topleveldir, p_arr[1])) {
67 // p_arr[1] ebene, polar, unterwelt, service, ...
68 // erst den Defaulteintrag der Region nehmen
69 res += region[0];
70 if (sizeof(p_arr) > 2 && m_contains(&ainc_string, region, p_arr[2])) {
71 // p_arr[2]: magiername. Fuer den Magier was hinterlegt.
72 res += ainc_string;
73 }
74 }
Zesstra645021b2021-05-08 12:06:13 +020075 // Fuer einige Top-Level-Verzeichnisse sollen explizit eingeschaltete
76 // Pragmas auch fuer alte Files nicht ausgeschaltet werden. In dem Fall
77 // direkt beenden.
78 switch(p_arr[0])
79 {
80 case "std":
81 case "secure":
82 case "room":
83 case "obj":
84 case "items":
85 return res;
86 }
MG Mud User88f12472016-06-24 23:31:02 +020087 }
88 // Fuer aeltere Files schalten wir einige Warnungen explizit aus. :-(
89 // (1407179680 == "Mon, 4. Aug 2014, 21:14:40")
Zesstra0d7c6482021-05-07 09:44:56 +020090 // (1609455600 == "Fre, 1. Jan 2021, 00:00:00")
Zesstra085be172019-05-27 22:04:04 +020091 // Auf anderen Rechnern als dem Mudrechner werden die Warnungen nur
92 // eingeschaltet, wenn die Files seit dem Mudstart geaendert wurden.
93 // Hintergrund: bei kopierten Mudlibs werden oft die mtimes geaendert und
94 // dann scrollt auf einmal alles. Aber wenn man nach dem Mudstart was
95 // aendert, ist es vermutlich ne einzelne, gezielte Aenderung an einem File.
MG Mud User88f12472016-06-24 23:31:02 +020096#if MUDHOST == __HOST_NAME__
Zesstra63713442021-05-09 10:02:37 +020097 switch(call_sefun("file_time", base_file))
Zesstra0d7c6482021-05-07 09:44:56 +020098 {
Zesstra63713442021-05-09 10:02:37 +020099 case 0 .. 1407179680:
100 res += PRAGMA("no_warn_missing_return");
101 // Fall-through, die naechsten kommen auch dazu
102 case 1407179681 .. 1609455600:
Zesstra775b6bd2021-05-08 13:59:14 +0200103 res += PRAGMA("no_warn_unused_variables,no_warn_dead_code,\
104 no_warn_applied_functions");
Zesstra63713442021-05-09 10:02:37 +0200105 // Fall-through
Zesstra0d7c6482021-05-07 09:44:56 +0200106 }
Zesstra085be172019-05-27 22:04:04 +0200107#else
108 if (call_sefun("file_time", base_file) < __BOOT_TIME__)
Zesstra085be172019-05-27 22:04:04 +0200109 {
Zesstra775b6bd2021-05-08 13:59:14 +0200110 res += PRAGMA("no_warn_missing_return,no_warn_unused_variables,\
111 no_warn_dead_code,no_warn_applied_functions");
MG Mud User88f12472016-06-24 23:31:02 +0200112 }
Zesstra0d7c6482021-05-07 09:44:56 +0200113#endif
MG Mud User88f12472016-06-24 23:31:02 +0200114 //DEBUG(res);
115 return res;
116}
117#undef RTTCHECKS
118#undef DEFAULTS
119#undef PRAGMA
120
121