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 | 9b78891 | 2021-05-08 12:00:37 +0200 | [diff] [blame] | 10 | #define DEFAULTS PRAGMA("save_types,warn_unused_variables,\ |
| 11 | warn_applied_functions,warn_dead_code") |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 12 | |
| 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. |
| 17 | private nosave mapping autoincludes = ([ |
| 18 | "d": ([ |
| 19 | "inseln": ([ |
| 20 | 0: "", |
| 21 | "zesstra": PRAGMA("strong_types") RTTCHECKS, |
| 22 | ]), |
| 23 | 0: "", |
| 24 | ]), |
| 25 | "std": ([ |
Zesstra | ac5b06f | 2019-11-26 21:20:03 +0100 | [diff] [blame] | 26 | 0: PRAGMA("strong_types") RTTCHECKS, |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 27 | ]), |
| 28 | "items": ([ |
Zesstra | ac5b06f | 2019-11-26 21:20:03 +0100 | [diff] [blame] | 29 | 0: PRAGMA("strong_types") RTTCHECKS, |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 30 | ]), |
| 31 | "secure": ([ |
Zesstra | ac5b06f | 2019-11-26 21:20:03 +0100 | [diff] [blame] | 32 | 0: PRAGMA("strong_types,range_check") RTTCHECKS, |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 33 | ]), |
| 34 | "p": ([ |
| 35 | 0: "", |
| 36 | "daemon": ([ |
| 37 | 0: PRAGMA("strong_types") RTTCHECKS |
| 38 | ]), |
| 39 | "service": ([ |
| 40 | 0: "" |
| 41 | ]), |
| 42 | ]), |
| 43 | 0: DEFAULTS, |
| 44 | ]); |
| 45 | |
| 46 | string 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])) { |
Zesstra | 0d7c648 | 2021-05-07 09:44:56 +0200 | [diff] [blame] | 63 | // p_arr[0]: d, p, std, etc. |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 64 | // erst wird der Defaulteintrag 0 genommen |
| 65 | res += topleveldir[0]; |
| 66 | if (sizeof(p_arr) > 1 && m_contains(®ion, 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 | } |
Zesstra | 645021b | 2021-05-08 12:06:13 +0200 | [diff] [blame] | 75 | // 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 User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 87 | } |
| 88 | // Fuer aeltere Files schalten wir einige Warnungen explizit aus. :-( |
| 89 | // (1407179680 == "Mon, 4. Aug 2014, 21:14:40") |
Zesstra | 0d7c648 | 2021-05-07 09:44:56 +0200 | [diff] [blame] | 90 | // (1609455600 == "Fre, 1. Jan 2021, 00:00:00") |
Zesstra | 085be17 | 2019-05-27 22:04:04 +0200 | [diff] [blame] | 91 | // 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 User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 96 | #if MUDHOST == __HOST_NAME__ |
Zesstra | 6371344 | 2021-05-09 10:02:37 +0200 | [diff] [blame] | 97 | switch(call_sefun("file_time", base_file)) |
Zesstra | 0d7c648 | 2021-05-07 09:44:56 +0200 | [diff] [blame] | 98 | { |
Zesstra | 6371344 | 2021-05-09 10:02:37 +0200 | [diff] [blame] | 99 | case 0 .. 1407179680: |
| 100 | res += PRAGMA("no_warn_missing_return"); |
| 101 | // Fall-through, die naechsten kommen auch dazu |
| 102 | case 1407179681 .. 1609455600: |
Zesstra | 775b6bd | 2021-05-08 13:59:14 +0200 | [diff] [blame] | 103 | res += PRAGMA("no_warn_unused_variables,no_warn_dead_code,\ |
| 104 | no_warn_applied_functions"); |
Zesstra | 6371344 | 2021-05-09 10:02:37 +0200 | [diff] [blame] | 105 | // Fall-through |
Zesstra | 0d7c648 | 2021-05-07 09:44:56 +0200 | [diff] [blame] | 106 | } |
Zesstra | 085be17 | 2019-05-27 22:04:04 +0200 | [diff] [blame] | 107 | #else |
| 108 | if (call_sefun("file_time", base_file) < __BOOT_TIME__) |
Zesstra | 085be17 | 2019-05-27 22:04:04 +0200 | [diff] [blame] | 109 | { |
Zesstra | 775b6bd | 2021-05-08 13:59:14 +0200 | [diff] [blame] | 110 | res += PRAGMA("no_warn_missing_return,no_warn_unused_variables,\ |
| 111 | no_warn_dead_code,no_warn_applied_functions"); |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 112 | } |
Zesstra | 0d7c648 | 2021-05-07 09:44:56 +0200 | [diff] [blame] | 113 | #endif |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 114 | //DEBUG(res); |
| 115 | return res; |
| 116 | } |
| 117 | #undef RTTCHECKS |
| 118 | #undef DEFAULTS |
| 119 | #undef PRAGMA |
| 120 | |
| 121 | |