diff --git a/.github/workflows/naming.yml b/.github/workflows/naming.yml index 07f4e9ae..cd714133 100644 --- a/.github/workflows/naming.yml +++ b/.github/workflows/naming.yml @@ -23,6 +23,7 @@ jobs: python3 tools/ncc/ncc.py \ --clang-lib ${{ env.LLVM_PATH }}/lib/libclang.so \ --style tools/ncc/ncc.style \ + --skip tools/ncc/skip.yaml --definition WINAPI FAR HWND__=HWND \ --include util \ --path LEGO1 diff --git a/LEGO1/ambulancemissionstate.h b/LEGO1/ambulancemissionstate.h index 6f3cc558..7cfe559c 100644 --- a/LEGO1/ambulancemissionstate.h +++ b/LEGO1/ambulancemissionstate.h @@ -22,9 +22,9 @@ class AmbulanceMissionState : public LegoState { return !strcmp(p_name, AmbulanceMissionState::ClassName()) || LegoState::IsA(p_name); } - inline MxU16 GetColor(MxU8 id) + inline MxU16 GetColor(MxU8 p_id) { - switch (id) { + switch (p_id) { case 1: return m_color1; case 2: diff --git a/LEGO1/gasstationstate.cpp b/LEGO1/gasstationstate.cpp index bf9f0ed9..b4ec4dfd 100644 --- a/LEGO1/gasstationstate.cpp +++ b/LEGO1/gasstationstate.cpp @@ -11,8 +11,8 @@ GasStationState::GasStationState() m_unk0x1e = 0; m_unk0x20 = 0; - undefined4* unk = m_unk0x08; - unk[0] = -1; - unk[1] = -1; - unk[2] = -1; + undefined4* unk0x08 = m_unk0x08; + unk0x08[0] = -1; + unk0x08[1] = -1; + unk0x08[2] = -1; } diff --git a/LEGO1/gifmanager.cpp b/LEGO1/gifmanager.cpp index 179ce3e6..0fc25b96 100644 --- a/LEGO1/gifmanager.cpp +++ b/LEGO1/gifmanager.cpp @@ -6,15 +6,15 @@ DECOMP_SIZE_ASSERT(GifMap, 0x08); DECOMP_SIZE_ASSERT(GifManagerBase, 0x14); DECOMP_SIZE_ASSERT(GifManager, 0x30); -GifMapEntry* DAT_100f0100; +GifMapEntry* g_unk0x100f0100; // FUNCTION: LEGO1 0x10001cc0 -GifMapEntry* GifMap::FindNode(const char*& string) +GifMapEntry* GifMap::FindNode(const char*& p_string) { GifMapEntry* ret = m_unk0x4; GifMapEntry* current = ret->m_parent; - while (current != DAT_100f0100) { - if (strcmp(current->m_key, string) <= 0) { + while (current != g_unk0x100f0100) { + if (strcmp(current->m_key, p_string) <= 0) { ret = current; current = current->m_right; } diff --git a/LEGO1/gifmanager.h b/LEGO1/gifmanager.h index 8132b027..3226b4b0 100644 --- a/LEGO1/gifmanager.h +++ b/LEGO1/gifmanager.h @@ -27,13 +27,13 @@ struct GifMapEntry { class GifMap { public: - GifMapEntry* FindNode(const char*& string); + GifMapEntry* FindNode(const char*& p_string); - inline GifData* Get(const char* string) + inline GifData* Get(const char* p_string) { GifData* ret = NULL; - GifMapEntry* entry = FindNode(string); - if (((m_unk0x4 == entry || strcmp(string, entry->m_key) > 0) ? m_unk0x4 : entry) != entry) + GifMapEntry* entry = FindNode(p_string); + if (((m_unk0x4 == entry || strcmp(p_string, entry->m_key) > 0) ? m_unk0x4 : entry) != entry) ret = entry->m_value; return ret; } @@ -48,7 +48,7 @@ class GifManagerBase { // STUB: LEGO1 0x1005a310 virtual ~GifManagerBase() {} // vtable+00 - inline GifData* Get(const char* name) { return m_unk0x8.Get(name); } + inline GifData* Get(const char* p_name) { return m_unk0x8.Get(p_name); } protected: undefined4 m_unk0x0; diff --git a/LEGO1/helicopterstate.h b/LEGO1/helicopterstate.h index 55575b94..3525303d 100644 --- a/LEGO1/helicopterstate.h +++ b/LEGO1/helicopterstate.h @@ -21,7 +21,7 @@ class HelicopterState : public LegoState { return !strcmp(p_name, HelicopterState::ClassName()) || LegoState::IsA(p_name); } - inline void SetUnknown8(undefined4 p_unk8) { m_unk0x8 = p_unk8; } + inline void SetUnknown8(undefined4 p_unk0x8) { m_unk0x8 = p_unk0x8; } protected: undefined4 m_unk0x8; diff --git a/LEGO1/infocenterstate.h b/LEGO1/infocenterstate.h index 9393d436..322e7bec 100644 --- a/LEGO1/infocenterstate.h +++ b/LEGO1/infocenterstate.h @@ -55,7 +55,7 @@ class InfocenterState : public LegoState { undefined4 unk13; */ - undefined pad[0x70]; + undefined m_pad[0x70]; MxU32 m_buffer[7]; // 0x78 }; diff --git a/LEGO1/islepathactor.cpp b/LEGO1/islepathactor.cpp index 0cf601dc..89151230 100644 --- a/LEGO1/islepathactor.cpp +++ b/LEGO1/islepathactor.cpp @@ -37,7 +37,7 @@ void IslePathActor::VTable0xd8() // FUNCTION: LEGO1 0x1001a200 IslePathActor::IslePathActor() { - this->m_pLegoWorld = NULL; + this->m_world = NULL; this->m_unk0x13c = 6.0; this->m_unk0x15c = 1.0; this->m_unk0x158 = 0; @@ -62,7 +62,7 @@ void IslePathActor::VTable0xe4() } // STUB: LEGO1 0x1001b2a0 -void IslePathActor::VTable0xe8(MxU32 p_1, MxBool p_2, MxU8 p_3) +void IslePathActor::VTable0xe8(MxU32, MxBool, MxU8) { // TODO } diff --git a/LEGO1/islepathactor.h b/LEGO1/islepathactor.h index 0fbe6eff..f0e616c4 100644 --- a/LEGO1/islepathactor.h +++ b/LEGO1/islepathactor.h @@ -36,14 +36,14 @@ class IslePathActor : public LegoPathActor { virtual void VTable0xdc(); // vtable+0xdc virtual void VTable0xe0(); // vtable+0xe0 virtual void VTable0xe4(); // vtable+0xe4 - virtual void VTable0xe8(MxU32 p_1, MxBool p_2, MxU8 p_3); // vtable+0xe8 + virtual void VTable0xe8(MxU32, MxBool, MxU8); // vtable+0xe8 virtual void VTable0xec(); // vtable+0xec - inline void SetWorld(LegoWorld* p_world) { m_pLegoWorld = p_world; } - inline LegoWorld* GetWorld() { return m_pLegoWorld; } + inline void SetWorld(LegoWorld* p_world) { m_world = p_world; } + inline LegoWorld* GetWorld() { return m_world; } private: - LegoWorld* m_pLegoWorld; // 0x154 + LegoWorld* m_world; // 0x154 MxFloat m_unk0x158; MxFloat m_unk0x15c; }; diff --git a/LEGO1/lego3dview.h b/LEGO1/lego3dview.h index 626ecbd6..e62a220f 100644 --- a/LEGO1/lego3dview.h +++ b/LEGO1/lego3dview.h @@ -8,7 +8,7 @@ class Lego3DView { inline ViewManager* GetViewManager() { return this->m_viewManager; } private: - char unknown[0x88]; + char m_pad[0x88]; ViewManager* m_viewManager; }; diff --git a/LEGO1/legoactor.cpp b/LEGO1/legoactor.cpp index 1ca8e367..d4c90cb9 100644 --- a/LEGO1/legoactor.cpp +++ b/LEGO1/legoactor.cpp @@ -10,15 +10,15 @@ MxFloat LegoActor::VTable0x50() } // FUNCTION: LEGO1 0x10002cd0 -void LegoActor::VTable0x54(MxFloat p_unk) +void LegoActor::VTable0x54(MxFloat p_unk0x68) { - m_unk0x68 = p_unk; + m_unk0x68 = p_unk0x68; } // FUNCTION: LEGO1 0x10002ce0 -void LegoActor::VTable0x58(MxFloat p_unk) +void LegoActor::VTable0x58(MxFloat p_unk0x70) { - m_unk0x70 = p_unk; + m_unk0x70 = p_unk0x70; } // FUNCTION: LEGO1 0x10002cf0 @@ -34,9 +34,9 @@ undefined LegoActor::VTable0x60() } // FUNCTION: LEGO1 0x10002d10 -void LegoActor::VTable0x64(undefined p_unk) +void LegoActor::VTable0x64(undefined p_unk0x74) { - m_unk0x74 = p_unk; + m_unk0x74 = p_unk0x74; } // End header diff --git a/LEGO1/legoactor.h b/LEGO1/legoactor.h index c356f211..1459e29f 100644 --- a/LEGO1/legoactor.h +++ b/LEGO1/legoactor.h @@ -23,12 +23,12 @@ class LegoActor : public LegoEntity { return !strcmp(p_name, LegoActor::ClassName()) || LegoEntity::IsA(p_name); } - virtual MxFloat VTable0x50(); // vtable+0x50 - virtual void VTable0x54(MxFloat p_unk); // vtable+0x54 - virtual void VTable0x58(MxFloat p_unk); // vtable+0x58 - virtual MxFloat VTable0x5c(); // vtable+0x5c - virtual undefined VTable0x60(); // vtable+0x60 - virtual void VTable0x64(undefined p_unk); // vtable+0x64 + virtual MxFloat VTable0x50(); // vtable+0x50 + virtual void VTable0x54(MxFloat p_unk0x68); // vtable+0x54 + virtual void VTable0x58(MxFloat p_unk0x70); // vtable+0x58 + virtual MxFloat VTable0x5c(); // vtable+0x5c + virtual undefined VTable0x60(); // vtable+0x60 + virtual void VTable0x64(undefined p_unk0x74); // vtable+0x64 private: MxFloat m_unk0x68; diff --git a/LEGO1/legoanimationmanager.cpp b/LEGO1/legoanimationmanager.cpp index 2c589138..55ac2856 100644 --- a/LEGO1/legoanimationmanager.cpp +++ b/LEGO1/legoanimationmanager.cpp @@ -4,9 +4,9 @@ int g_legoAnimationManagerConfig = 1; // FUNCTION: LEGO1 0x1005eb50 -void LegoAnimationManager::configureLegoAnimationManager(int param_1) +void LegoAnimationManager::configureLegoAnimationManager(MxS32 p_legoAnimationManagerConfig) { - g_legoAnimationManagerConfig = param_1; + g_legoAnimationManagerConfig = p_legoAnimationManagerConfig; } // STUB: LEGO1 0x1005eb60 @@ -28,7 +28,7 @@ void LegoAnimationManager::Init() } // STUB: LEGO1 0x1005f6d0 -void LegoAnimationManager::FUN_1005f6d0(MxBool p) +void LegoAnimationManager::FUN_1005f6d0(MxBool) { // TODO } diff --git a/LEGO1/legoanimationmanager.h b/LEGO1/legoanimationmanager.h index 07360436..d2578383 100644 --- a/LEGO1/legoanimationmanager.h +++ b/LEGO1/legoanimationmanager.h @@ -26,9 +26,9 @@ class LegoAnimationManager : public MxCore { return !strcmp(p_name, ClassName()) || MxCore::IsA(p_name); } - void FUN_1005f6d0(MxBool p); + void FUN_1005f6d0(MxBool); - __declspec(dllexport) static void configureLegoAnimationManager(int param_1); + __declspec(dllexport) static void configureLegoAnimationManager(MxS32 p_legoAnimationManagerConfig); private: void Init(); diff --git a/LEGO1/legobackgroundcolor.cpp b/LEGO1/legobackgroundcolor.cpp index f25bdf9e..e682356b 100644 --- a/LEGO1/legobackgroundcolor.cpp +++ b/LEGO1/legobackgroundcolor.cpp @@ -29,27 +29,27 @@ void LegoBackgroundColor::SetValue(const char* p_colorString) if (!videomanager || !p_colorString) return; - float converted_r, converted_g, converted_b; + float convertedR, convertedG, convertedB; char* colorStringCopy = strcpy(new char[strlen(p_colorString) + 1], p_colorString); char* colorStringSplit = strtok(colorStringCopy, g_delimiter); if (!strcmp(colorStringSplit, g_set)) { colorStringSplit = strtok(0, g_delimiter); if (colorStringSplit) - h = (float) (atoi(colorStringSplit) * 0.01); + m_h = (float) (atoi(colorStringSplit) * 0.01); colorStringSplit = strtok(0, g_delimiter); if (colorStringSplit) - s = (float) (atoi(colorStringSplit) * 0.01); + m_s = (float) (atoi(colorStringSplit) * 0.01); colorStringSplit = strtok(0, g_delimiter); if (colorStringSplit) - v = (float) (atoi(colorStringSplit) * 0.01); + m_v = (float) (atoi(colorStringSplit) * 0.01); - ConvertHSVToRGB(this->h, this->s, this->v, &converted_r, &converted_g, &converted_b); - videomanager->SetSkyColor(converted_r, converted_g, converted_b); + ConvertHSVToRGB(m_h, m_s, m_v, &convertedR, &convertedG, &convertedB); + videomanager->SetSkyColor(convertedR, convertedG, convertedB); } else if (!strcmp(colorStringSplit, g_reset)) { - ConvertHSVToRGB(this->h, this->s, this->v, &converted_r, &converted_g, &converted_b); - videomanager->SetSkyColor(converted_r, converted_g, converted_b); + ConvertHSVToRGB(m_h, m_s, m_v, &convertedR, &convertedG, &convertedB); + videomanager->SetSkyColor(convertedR, convertedG, convertedB); } delete[] colorStringCopy; diff --git a/LEGO1/legobackgroundcolor.h b/LEGO1/legobackgroundcolor.h index 0d9c7c5f..c11508bc 100644 --- a/LEGO1/legobackgroundcolor.h +++ b/LEGO1/legobackgroundcolor.h @@ -11,9 +11,9 @@ class LegoBackgroundColor : public MxVariable { virtual void SetValue(const char* p_colorString) override; private: - float h; - float s; - float v; + float m_h; + float m_s; + float m_v; }; #endif // LEGOBACKGROUNDCOLOR_H diff --git a/tools/ncc/ncc.py b/tools/ncc/ncc.py index 73c16213..89ad5dbc 100644 --- a/tools/ncc/ncc.py +++ b/tools/ncc/ncc.py @@ -367,6 +367,7 @@ def __init__(self): self.args = None self._style_file = None self.file_exclusions = None + self._skip_file = None self.parser = argparse.ArgumentParser( prog="ncc.py", @@ -407,6 +408,11 @@ def __init__(self): "matches a specified pattern according to the rules used by " "the Unix shell") + self.parser.add_argument('--skip', '-s', dest="skip_file", + help="Read list of items to ignore during the check. " + "User can use the skip file to specify character sequences that should " + "be ignored by ncc") + # self.parser.add_argument('--exclude-dir', dest='exclude_dir', help="Skip the directories" # "matching the pattern specified") @@ -425,6 +431,11 @@ def parse_cmd_line(self): sys.stderr.write("Style file '{}' not found!\n".format(self._style_file)) sys.exit(1) + if self.args.skip_file: + self._skip_file = self.args.skip_file + if not os.path.exists(self._skip_file): + sys.stderr.write("Skip file '{}' not found!\n".format(self._skip_file)) + def dump_all_rules(self): print("----------------------------------------------------------") print("{:<35} | {}".format("Rule Name", "Pattern")) @@ -432,6 +443,24 @@ def dump_all_rules(self): for (key, value) in default_rules_db.items(): print("{:<35} : {}".format(key, value.pattern_str)) +class SkipDb(object): + def __init__(self, skip_file=None): + self.__skip_db = {} + + if skip_file: + self.build_skip_db(skip_file) + + def build_skip_db(self, skip_file): + with open(skip_file) as stylefile: + style_rules = yaml.safe_load(stylefile) + for (skip_string, skip_comment) in style_rules.items(): + self.__skip_db[skip_string] = skip_comment + + def check_skip_db(self, input_query): + if input_query in self.__skip_db.keys(): + return 1 + else: + return 0 class RulesDb(object): def __init__(self, style_file=None): @@ -491,9 +520,10 @@ def get_rule(self, rule_name): class Validator(object): - def __init__(self, rule_db, filename, options): + def __init__(self, rule_db, filename, options, skip_db=None): self.filename = filename self.rule_db = rule_db + self.skip_db = skip_db self.options = options self.node_stack = AstNodeStack() @@ -550,6 +580,10 @@ def evaluate(self, node): if not self.rule_db.is_rule_enabled(node.kind): return 0 + # If the pattern is in the skip list, ignore it + if self.skip_db.check_skip_db(node.displayname): + return 0 + rule_name = self.rule_db.get_rule_names(node.kind) rule = self.rule_db.get_rule(rule_name) if rule.evaluate(node, self.node_stack.peek()) is False: @@ -598,19 +632,22 @@ def do_validate(options, filename): """ Creating the rules database """ rules_db = RulesDb(op._style_file) + """ Creating the skip database """ + skip_db = SkipDb(op._skip_file) + """ Check the source code against the configured rules """ errors = 0 for path in op.args.path: if os.path.isfile(path): if do_validate(op, path): - v = Validator(rules_db, path, op) + v = Validator(rules_db, path, op, skip_db) errors += v.validate() elif os.path.isdir(path): for (root, subdirs, files) in os.walk(path): for filename in files: path = root + '/' + filename if do_validate(op, path): - v = Validator(rules_db, path, op) + v = Validator(rules_db, path, op, skip_db) errors += v.validate() if not op.args.recurse: diff --git a/tools/ncc/ncc.style b/tools/ncc/ncc.style index 4de7b5ac..0f68c5e9 100644 --- a/tools/ncc/ncc.style +++ b/tools/ncc/ncc.style @@ -1,9 +1,9 @@ ClassName: '^[A-Z][a-zA-Z0-9]+$' -CppMethod: '^operator|^FUN_[a-f0-9]{8}$|^VTable0x[a-f0-9]{1,4}$|^(?!VTable).*[A-Z][a-zA-Z0-9]+$' +CppMethod: '^operator|^FUN_[a-f0-9]{8}$|^VTable0x[a-f0-9]{1,8}$|^(?!VTable)[A-Z][a-zA-Z0-9]+$' # EnumConstantName EnumName: '^\(unnamed|^[A-Z][a-zA-Z0-9]+$' -FunctionName: '^operator|^FUN_[a-f0-9]{8}$|^VTable0x[a-f0-9]{1,4}$|^(?!VTable).*[A-Z][a-zA-Z0-9]+$' -ParameterName: '^p_(unk0x[a-f0-9]{1,4}$|(?!unk).*[a-z][a-zA-Z0-9]*)$|^$' +FunctionName: '^operator|^FUN_[a-f0-9]{8}$|^VTable0x[a-f0-9]{1,8}$|^(?!VTable)[A-Z][a-zA-Z0-9]+$' +ParameterName: '^p_(unk0x[a-f0-9]{1,8}$|(?!unk)[a-z][a-zA-Z0-9]*)$|^$' StructName: '^\(anon|^\(unnamed|^[A-Z][a-zA-Z0-9]+$' TypedefName: '^[A-Z][a-zA-Z0-9]+$' UnionName: '^\(anon|^[A-Z][a-zA-Z0-9]+$' @@ -18,4 +18,4 @@ VariableName: Integer: '' Bool: '' Pointer: '' - Pattern: '^(unk0x[a-f0-9]{1,4}$|(?!unk).*[a-z][a-zA-Z0-9]*)$' + Pattern: '^(unk0x[a-f0-9]{1,8}$|(?!unk)[a-z][a-zA-Z0-9]*)$' diff --git a/tools/ncc/skip.yaml b/tools/ncc/skip.yaml new file mode 100644 index 00000000..eb6ee194 --- /dev/null +++ b/tools/ncc/skip.yaml @@ -0,0 +1,2 @@ +configureLegoAnimationManager(MxS32): 'DLL exported function' +