MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 1 | // 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 User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 9 | #define RTTCHECKS PRAGMA("rtt_checks") |
Zesstra | 000c16b | 2021-01-26 22:36:27 +0100 | [diff] [blame^] | 10 | #define DEFAULTS PRAGMA("save_types,warn_unused_variables") |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 11 | |
| 12 | // geschachteltes Mapping in toplevel.region.magier Hierarchie. |
| 13 | // Wichtig: jede Hierarchiebene _muss_ ein Mapping sein, welches einen Eintrag |
| 14 | // 0 als Default enthaelt, welcher einen Strings als Wert hat. |
| 15 | // Ausnahme: die letzte Ebene (Magierebene), die muss ein String ein. |
| 16 | private nosave mapping autoincludes = ([ |
| 17 | "d": ([ |
| 18 | "inseln": ([ |
| 19 | 0: "", |
| 20 | "zesstra": PRAGMA("strong_types") RTTCHECKS, |
| 21 | ]), |
| 22 | 0: "", |
| 23 | ]), |
| 24 | "std": ([ |
Zesstra | ac5b06f | 2019-11-26 21:20:03 +0100 | [diff] [blame] | 25 | 0: PRAGMA("strong_types") RTTCHECKS, |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 26 | ]), |
| 27 | "items": ([ |
Zesstra | ac5b06f | 2019-11-26 21:20:03 +0100 | [diff] [blame] | 28 | 0: PRAGMA("strong_types") RTTCHECKS, |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 29 | ]), |
| 30 | "secure": ([ |
Zesstra | ac5b06f | 2019-11-26 21:20:03 +0100 | [diff] [blame] | 31 | 0: PRAGMA("strong_types,range_check") RTTCHECKS, |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 32 | ]), |
| 33 | "p": ([ |
| 34 | 0: "", |
| 35 | "daemon": ([ |
| 36 | 0: PRAGMA("strong_types") RTTCHECKS |
| 37 | ]), |
| 38 | "service": ([ |
| 39 | 0: "" |
| 40 | ]), |
| 41 | ]), |
| 42 | 0: DEFAULTS, |
| 43 | ]); |
| 44 | |
| 45 | string autoincludehook(string base_file, string current_file, int sys_include) |
| 46 | { |
| 47 | mapping topleveldir, region; // mappings for spezialisiertere Pfade |
| 48 | string ainc_string; |
| 49 | |
| 50 | // Wenn current_file != 0 ist, wird gerade vom kompilierten Objekt |
| 51 | // <base_file> etwas (indirekt) inkludiert. Dort duerfen die Pragmas |
| 52 | // keinesfalls reingeschrieben werden. |
| 53 | if (current_file) |
| 54 | return 0; |
| 55 | |
| 56 | string res=autoincludes[0]; // global default. |
| 57 | |
| 58 | string *p_arr = explode(base_file,"/")-({""}); |
| 59 | //DEBUG(sprintf("AINC: File: %O, Pfad: %O\n",base_file, p_arr)); |
| 60 | |
| 61 | if (sizeof(p_arr) && m_contains(&topleveldir, autoincludes, p_arr[0])) { |
| 62 | // p_arr[0]: d, p, std, etc. |
| 63 | // erst wird der Defaulteintrag 0 genommen |
| 64 | res += topleveldir[0]; |
| 65 | if (sizeof(p_arr) > 1 && m_contains(®ion, topleveldir, p_arr[1])) { |
| 66 | // p_arr[1] ebene, polar, unterwelt, service, ... |
| 67 | // erst den Defaulteintrag der Region nehmen |
| 68 | res += region[0]; |
| 69 | if (sizeof(p_arr) > 2 && m_contains(&ainc_string, region, p_arr[2])) { |
| 70 | // p_arr[2]: magiername. Fuer den Magier was hinterlegt. |
| 71 | res += ainc_string; |
| 72 | } |
| 73 | } |
| 74 | } |
| 75 | // Fuer aeltere Files schalten wir einige Warnungen explizit aus. :-( |
| 76 | // (1407179680 == "Mon, 4. Aug 2014, 21:14:40") |
Zesstra | 085be17 | 2019-05-27 22:04:04 +0200 | [diff] [blame] | 77 | // Auf anderen Rechnern als dem Mudrechner werden die Warnungen nur |
| 78 | // eingeschaltet, wenn die Files seit dem Mudstart geaendert wurden. |
| 79 | // Hintergrund: bei kopierten Mudlibs werden oft die mtimes geaendert und |
| 80 | // dann scrollt auf einmal alles. Aber wenn man nach dem Mudstart was |
| 81 | // aendert, ist es vermutlich ne einzelne, gezielte Aenderung an einem File. |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 82 | #if MUDHOST == __HOST_NAME__ |
Zesstra | 085be17 | 2019-05-27 22:04:04 +0200 | [diff] [blame] | 83 | if (call_sefun("file_time", base_file) < 1407179680) |
| 84 | #else |
| 85 | if (call_sefun("file_time", base_file) < __BOOT_TIME__) |
| 86 | #endif |
| 87 | { |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 88 | res += PRAGMA("no_warn_missing_return"); |
| 89 | } |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 90 | //DEBUG(res); |
| 91 | return res; |
| 92 | } |
| 93 | #undef RTTCHECKS |
| 94 | #undef DEFAULTS |
| 95 | #undef PRAGMA |
| 96 | |
| 97 | |