diff options
author | Dennis <dhilhorst2000@gmail.com> | 2021-07-10 18:23:20 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-10 11:23:20 -0500 |
commit | 92a8e55fdd348a88a365eb389181d8e29da6dad9 (patch) | |
tree | 2467ef22cb8cf75bdf056143fab3fac4a68ef404 /tools/preproc/preproc.cpp | |
parent | 386299d1f401cb939e6fe3ea16d0ca57731b2648 (diff) |
Decompiled some item related functions (#42)
* decompile sub_8091290
* decompile sub_80912c8
* rename functions / struct field
* more names
* decompile 80913A0
* decompile GetItemMove
* decompile sub_80913E0
* rename function
* decompile CanSellItem function
* rename inventory struct
* add some item check functions
* fix renaming stuff
* this file shouldnt have been here
* forgot merge conflict
* decompile more item functions
* rename some stuff
* fix HM/TM naming
* Update src/code_801AFA4.c
Use enum value for USED_TM
* Fix incorrect value
Co-authored-by: Seth Barberee <seth.barberee@gmail.com>
Diffstat (limited to 'tools/preproc/preproc.cpp')
-rw-r--r-- | tools/preproc/preproc.cpp | 312 |
1 files changed, 156 insertions, 156 deletions
diff --git a/tools/preproc/preproc.cpp b/tools/preproc/preproc.cpp index c9c6042..41856f7 100644 --- a/tools/preproc/preproc.cpp +++ b/tools/preproc/preproc.cpp @@ -1,156 +1,156 @@ -// Copyright(c) 2016 YamaArashi -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#include <string> -#include <stack> -#include "preproc.h" -#include "asm_file.h" -#include "c_file.h" -#include "charmap.h" - -Charmap* g_charmap; - -void PrintAsmBytes(unsigned char *s, int length) -{ - if (length > 0) - { - std::printf("\t.byte "); - for (int i = 0; i < length; i++) - { - std::printf("0x%02X", s[i]); - - if (i < length - 1) - std::printf(", "); - } - std::putchar('\n'); - } -} - -void PreprocAsmFile(std::string filename) -{ - std::stack<AsmFile> stack; - - stack.push(AsmFile(filename)); - - for (;;) - { - while (stack.top().IsAtEnd()) - { - stack.pop(); - - if (stack.empty()) - return; - else - stack.top().OutputLocation(); - } - - Directive directive = stack.top().GetDirective(); - - switch (directive) - { - case Directive::Include: - stack.push(AsmFile(stack.top().ReadPath())); - stack.top().OutputLocation(); - break; - case Directive::String: - { - unsigned char s[kMaxStringLength]; - int length = stack.top().ReadString(s); - PrintAsmBytes(s, length); - break; - } - case Directive::Braille: - { - unsigned char s[kMaxStringLength]; - int length = stack.top().ReadBraille(s); - PrintAsmBytes(s, length); - break; - } - case Directive::Unknown: - { - std::string globalLabel = stack.top().GetGlobalLabel(); - - if (globalLabel.length() != 0) - { - const char *s = globalLabel.c_str(); - std::printf("%s: ; .global %s\n", s, s); - } - else - { - stack.top().OutputLine(); - } - - break; - } - } - } -} - -void PreprocCFile(std::string filename) -{ - CFile cFile(filename); - cFile.Preproc(); -} - -char* GetFileExtension(char* filename) -{ - char* extension = filename; - - while (*extension != 0) - extension++; - - while (extension > filename && *extension != '.') - extension--; - - if (extension == filename) - return nullptr; - - extension++; - - if (*extension == 0) - return nullptr; - - return extension; -} - -int main(int argc, char **argv) -{ - if (argc != 3) - { - std::fprintf(stderr, "Usage: %s SRC_FILE CHARMAP_FILE", argv[0]); - return 1; - } - - g_charmap = new Charmap(argv[2]); - - char* extension = GetFileExtension(argv[1]); - - if (!extension) - FATAL_ERROR("\"%s\" has no file extension.\n", argv[1]); - - if ((extension[0] == 's') && extension[1] == 0) - PreprocAsmFile(argv[1]); - else if ((extension[0] == 'c' || extension[0] == 'i') && extension[1] == 0) - PreprocCFile(argv[1]); - else - FATAL_ERROR("\"%s\" has an unknown file extension of \"%s\".\n", argv[1], extension); - - return 0; -} +// Copyright(c) 2016 YamaArashi
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#include <string>
+#include <stack>
+#include "preproc.h"
+#include "asm_file.h"
+#include "c_file.h"
+#include "charmap.h"
+
+Charmap* g_charmap;
+
+void PrintAsmBytes(unsigned char *s, int length)
+{
+ if (length > 0)
+ {
+ std::printf("\t.byte ");
+ for (int i = 0; i < length; i++)
+ {
+ std::printf("0x%02X", s[i]);
+
+ if (i < length - 1)
+ std::printf(", ");
+ }
+ std::putchar('\n');
+ }
+}
+
+void PreprocAsmFile(std::string filename)
+{
+ std::stack<AsmFile> stack;
+
+ stack.push(AsmFile(filename));
+
+ for (;;)
+ {
+ while (stack.top().IsAtEnd())
+ {
+ stack.pop();
+
+ if (stack.empty())
+ return;
+ else
+ stack.top().OutputLocation();
+ }
+
+ Directive directive = stack.top().GetDirective();
+
+ switch (directive)
+ {
+ case Directive::Include:
+ stack.push(AsmFile(stack.top().ReadPath()));
+ stack.top().OutputLocation();
+ break;
+ case Directive::String:
+ {
+ unsigned char s[kMaxStringLength];
+ int length = stack.top().ReadString(s);
+ PrintAsmBytes(s, length);
+ break;
+ }
+ case Directive::Braille:
+ {
+ unsigned char s[kMaxStringLength];
+ int length = stack.top().ReadBraille(s);
+ PrintAsmBytes(s, length);
+ break;
+ }
+ case Directive::Unknown:
+ {
+ std::string globalLabel = stack.top().GetGlobalLabel();
+
+ if (globalLabel.length() != 0)
+ {
+ const char *s = globalLabel.c_str();
+ std::printf("%s: ; .global %s\n", s, s);
+ }
+ else
+ {
+ stack.top().OutputLine();
+ }
+
+ break;
+ }
+ }
+ }
+}
+
+void PreprocCFile(std::string filename)
+{
+ CFile cFile(filename);
+ cFile.Preproc();
+}
+
+char* GetFileExtension(char* filename)
+{
+ char* extension = filename;
+
+ while (*extension != 0)
+ extension++;
+
+ while (extension > filename && *extension != '.')
+ extension--;
+
+ if (extension == filename)
+ return nullptr;
+
+ extension++;
+
+ if (*extension == 0)
+ return nullptr;
+
+ return extension;
+}
+
+int main(int argc, char **argv)
+{
+ if (argc != 3)
+ {
+ std::fprintf(stderr, "Usage: %s SRC_FILE CHARMAP_FILE", argv[0]);
+ return 1;
+ }
+
+ g_charmap = new Charmap(argv[2]);
+
+ char* extension = GetFileExtension(argv[1]);
+
+ if (!extension)
+ FATAL_ERROR("\"%s\" has no file extension.\n", argv[1]);
+
+ if ((extension[0] == 's') && extension[1] == 0)
+ PreprocAsmFile(argv[1]);
+ else if ((extension[0] == 'c' || extension[0] == 'i') && extension[1] == 0)
+ PreprocCFile(argv[1]);
+ else
+ FATAL_ERROR("\"%s\" has an unknown file extension of \"%s\".\n", argv[1], extension);
+
+ return 0;
+}
|