summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--python-geckolibs.spec343
-rw-r--r--sources1
3 files changed, 345 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..dce3aa4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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
diff --git a/sources b/sources
new file mode 100644
index 0000000..850855a
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+bf9aa2d05dd22e1dbc33c92640b62d89 geckolibs-0.2.3.tar.gz