diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | python-geckolibs.spec | 343 | ||||
-rw-r--r-- | sources | 1 |
3 files changed, 345 insertions, 0 deletions
@@ -0,0 +1 @@ +/geckolibs-0.2.3.tar.gz diff --git a/python-geckolibs.spec b/python-geckolibs.spec new file mode 100644 index 0000000..a5edc3a --- /dev/null +++ b/python-geckolibs.spec @@ -0,0 +1,343 @@ +%global _empty_manifest_terminate_build 0 +Name: python-geckolibs +Version: 0.2.3 +Release: 1 +Summary: Python library for working with the Gecko Code format for Wii/GC +License: GNU General Public License v3.0 +URL: https://github.com/JoshuaMKW/geckocode-libs +Source0: https://mirrors.aliyun.com/pypi/web/packages/ec/01/6cbb185ba696d6639bf9efd9b9634cc5e2942cab83a21fc1b2ce49c89ff6/geckolibs-0.2.3.tar.gz +BuildArch: noarch + +Requires: python3-dolreader + +%description +# geckocode-libs + +Python library for parsing and editing Gecko Codes for the Wii/GCN + +## Installation + +`pip install geckolibs` + +## Usage + +With `geckocode-libs`, file parsing is simple to do. + +You can read a textual codelist into a `GeckoCodeTable` using the method `GeckoCodeTable.from_text(our_text)`, which automatically detects the type of codelist being read and handles all the dirty work for you! This returns a new GeckoCodeTable object. + +You can also read a raw codelist from a GCT using the method `GeckoCodeTable.from_bytes(our_bytes)`, which parses the raw bytes given to the method into a new GeckoCodeTable object. + +When you are done editing your GCT, you can convert the object back into a codelist, text, or raw data using the methods `GeckoCodeTable.as_codelist(codelist_type)`, `GeckoCodeTable.as_text()`, and `GeckoCodeTable.as_bytes()` respectively. + +You can also create your own codes using the library itself, an example shown here: + +```python +gct = GeckoCodeTable() # Empty GCT +code = GeckoCode("Our awesome code", "Me") # Empty GeckoCode named "Our awesome code", created by "Me" +command = Write32(0x60000000, 0x80231480) # Individual command + +code.add_child(command) # Add a command to the code +gct.add_child(code) # Add a code to the GCT +``` + +Type checking of codes can be done in 3 ways: + +```python +code = Write8(69, 0x80203932) + +code == Write8 # True +code == Write8.codetype # True +code.codetype == Write8.codetype # True +code.codetype == GeckoCommand.Type.WRITE_8 # True +``` + +It should be noted that in order to check multiple codetypes at once, `code.codetype` should be used. + +## Example + +```python +>>> from geckolibs.geckocode import * +>>> from geckolibs.gct import * +>>> +>>> ifblock = IfEqual32(0x00D0C0DE, 0x80204158) +>>> +>>> code = WriteString(b"\x00\x01\x02\x03\x04\x05", 0x80023994) +>>> ifblock.add_child(code) +>>> +>>> code = AsmInsert(b"\x38\x03\x00\x01\x38\x00\x00\x18", 0x80291358) +>>> ifblock.add_child(code) +>>> +>>> geckocode = GeckoCode("Test Code", "JoshuaMK", "Testing our new code!", ifblock) +>>> geckocode.add_child(Terminator(0x80008000)) +>>> +>>> print(geckocode) + +Test Code [JoshuaMK] + Testing our new code! + +>>> print(geckocode.as_text()) + +20204158 00D0C0DE +06023994 00000006 +00010203 04050000 +C2291358 00000002 +38030001 38000018 +60000000 00000000 +E0000000 80008000 + +>>> for command in geckocode: +... print(command) +... + +(20) If the word at address (0x00204158 + the base address) is equal to 0x00D0C0DE: + (06) Write 6 bytes to 0x00023994 + the base address + (C2) Inject (b / b) the designated ASM at 0x00291358 + the base address +(E0) Clear the code execution status. Set the base address to 80000000. Set the pointer address to 80000000. +``` + + +## Notes + +Please give credit to this project when using it! :) + + + + +%package -n python3-geckolibs +Summary: Python library for working with the Gecko Code format for Wii/GC +Provides: python-geckolibs +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-geckolibs +# geckocode-libs + +Python library for parsing and editing Gecko Codes for the Wii/GCN + +## Installation + +`pip install geckolibs` + +## Usage + +With `geckocode-libs`, file parsing is simple to do. + +You can read a textual codelist into a `GeckoCodeTable` using the method `GeckoCodeTable.from_text(our_text)`, which automatically detects the type of codelist being read and handles all the dirty work for you! This returns a new GeckoCodeTable object. + +You can also read a raw codelist from a GCT using the method `GeckoCodeTable.from_bytes(our_bytes)`, which parses the raw bytes given to the method into a new GeckoCodeTable object. + +When you are done editing your GCT, you can convert the object back into a codelist, text, or raw data using the methods `GeckoCodeTable.as_codelist(codelist_type)`, `GeckoCodeTable.as_text()`, and `GeckoCodeTable.as_bytes()` respectively. + +You can also create your own codes using the library itself, an example shown here: + +```python +gct = GeckoCodeTable() # Empty GCT +code = GeckoCode("Our awesome code", "Me") # Empty GeckoCode named "Our awesome code", created by "Me" +command = Write32(0x60000000, 0x80231480) # Individual command + +code.add_child(command) # Add a command to the code +gct.add_child(code) # Add a code to the GCT +``` + +Type checking of codes can be done in 3 ways: + +```python +code = Write8(69, 0x80203932) + +code == Write8 # True +code == Write8.codetype # True +code.codetype == Write8.codetype # True +code.codetype == GeckoCommand.Type.WRITE_8 # True +``` + +It should be noted that in order to check multiple codetypes at once, `code.codetype` should be used. + +## Example + +```python +>>> from geckolibs.geckocode import * +>>> from geckolibs.gct import * +>>> +>>> ifblock = IfEqual32(0x00D0C0DE, 0x80204158) +>>> +>>> code = WriteString(b"\x00\x01\x02\x03\x04\x05", 0x80023994) +>>> ifblock.add_child(code) +>>> +>>> code = AsmInsert(b"\x38\x03\x00\x01\x38\x00\x00\x18", 0x80291358) +>>> ifblock.add_child(code) +>>> +>>> geckocode = GeckoCode("Test Code", "JoshuaMK", "Testing our new code!", ifblock) +>>> geckocode.add_child(Terminator(0x80008000)) +>>> +>>> print(geckocode) + +Test Code [JoshuaMK] + Testing our new code! + +>>> print(geckocode.as_text()) + +20204158 00D0C0DE +06023994 00000006 +00010203 04050000 +C2291358 00000002 +38030001 38000018 +60000000 00000000 +E0000000 80008000 + +>>> for command in geckocode: +... print(command) +... + +(20) If the word at address (0x00204158 + the base address) is equal to 0x00D0C0DE: + (06) Write 6 bytes to 0x00023994 + the base address + (C2) Inject (b / b) the designated ASM at 0x00291358 + the base address +(E0) Clear the code execution status. Set the base address to 80000000. Set the pointer address to 80000000. +``` + + +## Notes + +Please give credit to this project when using it! :) + + + + +%package help +Summary: Development documents and examples for geckolibs +Provides: python3-geckolibs-doc +%description help +# geckocode-libs + +Python library for parsing and editing Gecko Codes for the Wii/GCN + +## Installation + +`pip install geckolibs` + +## Usage + +With `geckocode-libs`, file parsing is simple to do. + +You can read a textual codelist into a `GeckoCodeTable` using the method `GeckoCodeTable.from_text(our_text)`, which automatically detects the type of codelist being read and handles all the dirty work for you! This returns a new GeckoCodeTable object. + +You can also read a raw codelist from a GCT using the method `GeckoCodeTable.from_bytes(our_bytes)`, which parses the raw bytes given to the method into a new GeckoCodeTable object. + +When you are done editing your GCT, you can convert the object back into a codelist, text, or raw data using the methods `GeckoCodeTable.as_codelist(codelist_type)`, `GeckoCodeTable.as_text()`, and `GeckoCodeTable.as_bytes()` respectively. + +You can also create your own codes using the library itself, an example shown here: + +```python +gct = GeckoCodeTable() # Empty GCT +code = GeckoCode("Our awesome code", "Me") # Empty GeckoCode named "Our awesome code", created by "Me" +command = Write32(0x60000000, 0x80231480) # Individual command + +code.add_child(command) # Add a command to the code +gct.add_child(code) # Add a code to the GCT +``` + +Type checking of codes can be done in 3 ways: + +```python +code = Write8(69, 0x80203932) + +code == Write8 # True +code == Write8.codetype # True +code.codetype == Write8.codetype # True +code.codetype == GeckoCommand.Type.WRITE_8 # True +``` + +It should be noted that in order to check multiple codetypes at once, `code.codetype` should be used. + +## Example + +```python +>>> from geckolibs.geckocode import * +>>> from geckolibs.gct import * +>>> +>>> ifblock = IfEqual32(0x00D0C0DE, 0x80204158) +>>> +>>> code = WriteString(b"\x00\x01\x02\x03\x04\x05", 0x80023994) +>>> ifblock.add_child(code) +>>> +>>> code = AsmInsert(b"\x38\x03\x00\x01\x38\x00\x00\x18", 0x80291358) +>>> ifblock.add_child(code) +>>> +>>> geckocode = GeckoCode("Test Code", "JoshuaMK", "Testing our new code!", ifblock) +>>> geckocode.add_child(Terminator(0x80008000)) +>>> +>>> print(geckocode) + +Test Code [JoshuaMK] + Testing our new code! + +>>> print(geckocode.as_text()) + +20204158 00D0C0DE +06023994 00000006 +00010203 04050000 +C2291358 00000002 +38030001 38000018 +60000000 00000000 +E0000000 80008000 + +>>> for command in geckocode: +... print(command) +... + +(20) If the word at address (0x00204158 + the base address) is equal to 0x00D0C0DE: + (06) Write 6 bytes to 0x00023994 + the base address + (C2) Inject (b / b) the designated ASM at 0x00291358 + the base address +(E0) Clear the code execution status. Set the base address to 80000000. Set the pointer address to 80000000. +``` + + +## Notes + +Please give credit to this project when using it! :) + + + + +%prep +%autosetup -n geckolibs-0.2.3 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "\"/%h/%f\"\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "\"/%h/%f\"\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "\"/%h/%f\"\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "\"/%h/%f\"\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "\"/%h/%f.gz\"\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-geckolibs -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Tue Jun 20 2023 Python_Bot <Python_Bot@openeuler.org> - 0.2.3-1 +- Package Spec generated @@ -0,0 +1 @@ +bf9aa2d05dd22e1dbc33c92640b62d89 geckolibs-0.2.3.tar.gz |