{"id":23838281,"url":"https://github.com/shred/patchwork","last_synced_at":"2025-09-07T15:32:28.894Z","repository":{"id":22551454,"uuid":"25892501","full_name":"shred/patchwork","owner":"shred","description":"Amiga library call validator","archived":false,"fork":false,"pushed_at":"2022-12-13T18:45:37.000Z","size":224,"stargazers_count":9,"open_issues_count":0,"forks_count":0,"subscribers_count":7,"default_branch":"master","last_synced_at":"2024-12-25T19:49:54.415Z","etag":null,"topics":["amiga-development","aminet","assembly","enforcer"],"latest_commit_sha":null,"homepage":"","language":"Assembly","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/shred.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-10-28T22:08:18.000Z","updated_at":"2023-09-13T11:39:12.000Z","dependencies_parsed_at":"2023-01-11T21:40:26.515Z","dependency_job_id":null,"html_url":"https://github.com/shred/patchwork","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shred%2Fpatchwork","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shred%2Fpatchwork/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shred%2Fpatchwork/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shred%2Fpatchwork/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shred","download_url":"https://codeload.github.com/shred/patchwork/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":232225333,"owners_count":18491370,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["amiga-development","aminet","assembly","enforcer"],"created_at":"2025-01-02T16:53:49.406Z","updated_at":"2025-09-07T15:32:28.876Z","avatar_url":"https://github.com/shred.png","language":"Assembly","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PatchWork\n\nPatchWork is a debugging tool similar to MuForce and Mungwall. It asserts that calls to AmigaOS libraries are AutoDocs conformous. Illegal parameters (e.g. NULL where a pointer is expected) are reported. PatchWork helps you to make your code more robust and future proof. 😉\n\nThe source code was closed, like almost all of my Amiga projects. I have reviewed and reformatted the files, translated the comments from German to English, and made the project compilable on Linux (and probably other targets) using vbcc. The source is now open to everyone for contributing, studying, archiving, or just enjoying the good old Amiga times.\n\n## Features\n\n* Validates `commodities`, `dos`, `exec`, `gadtools`, `graphics`, `intuition` and `utility` library calls, up to AmigaOS 3.2.\n* Reports to the debugging console (e.g. Sushi).\n* Shows a code extract of the violating code if [DisLib](http://aminet.net/package/util/libs/DisLib) by Thomas Richter is installed.\n* 100% hand-made assembler code, so PatchWork only has a neglectable performance impact on your system, and can just be kept running.\n* Works on any 68000 based CPU, no MMU required.\n* GPL licensed, open source.\n* Source Code is available at [Codeberg](https://codeberg.org/shred/patchwork).\n\n## Example Output\n\nThis is how a full PatchWork hit with all options enabled looks like:\n\n```\nexec.library OldOpenLibrary(\"dos.library\")\nSeverity 1: obsoleted, use OpenLibrary() instead\nPC=07E9BCFC TCB=07BF34A0 (\"Shell Process\")\nData: FFFFFFFF 00000000 00000000 00000000 00000000 00000000 00000000 00000000\nAddr: 07EA2A3A 07E9FF46 00000000 00000000 00000000 00000000 078007F8 07BF4510\n----\u003e 07EA2A3A - \"pwtest\"\tHunk 0001, Offset 00008A4A\n----\u003e 07E9FF46 - \"pwtest\"\tHunk 0001, Offset 00005F56\nPC-8: 51CEFF22 4E7570FF 23C007EA 251E41FA 6D4E23C8 07EA2522 43FA4250 2C780004\nPC *: 4EAEFE68 23C007EA 253A6100 7F886100 089A23C0 07EA266A 6700024C 203C0000\n07e9bcdc :  51ce ff22                  dbra d6,$7e9bc00\n07e9bce0 :  4e75                       rts\n07e9bce2 :  70ff                       moveq.l #-$1,d0\n07e9bce4 :  23c0 07ea 251e             move.l d0,$7ea251e\n07e9bcea :  41fa 6d4e                  lea.l $7ea2a3a(pc),a0\n07e9bcee :  23c8 07ea 2522             move.l a0,$7ea2522\n07e9bcf4 :  43fa 4250                  lea.l $7e9ff46(pc),a1\n07e9bcf8 :  2c78 0004                  movea.l $4.w,a6\n07e9bcfc : *4eae fe68                  jsr -$198(a6)\n07e9bd00 :  23c0 07ea 253a             move.l d0,$7ea253a\n07e9bd06 :  6100 7f88                  bsr $7ea3c90\n07e9bd0a :  6100 089a                  bsr $7e9c5a6\n07e9bd0e :  23c0 07ea 266a             move.l d0,$7ea266a\n07e9bd14 :  6700 024c                  beq $7e9bf62\n07e9bd18 :  203c 0000 2800             move.l #$2800,d0\nStck: 07E9BD00 07BA246C 00000001 00F95C92 00000FA0 4D656761 20536F75 6E644372\nStck: 61636B65 72000000 07BF5E28 00000B48 02090909 05050500 00001111 114E4E4E\n----\u003e 07E9BCFC - \"pwtest\"\tHunk 0001, Offset 00001D0C\n----\u003e 07E9BD00 - \"pwtest\"\tHunk 0001, Offset 00001D10\n----\u003e 07BA246C - \"pwtest\"\tHunk 0000, Offset 0000000C\n----\u003e 00F95C92 - \"ROM - dos 40.3 (1.4.93)\"\tHunk 0000, Offset 000005AE\n```\n\n## Building from Source\n\nThis project is mainly made to be build on Linux machines. However, with a few modifications it can also be built on AmigaOS and other operating systems.\n\nRequirements:\n\n* [GNU make](http://www.gnu.org/software/make/) or another compatible make tool\n* [vbcc](http://www.compilers.de/vbcc.html) (or just [vasm](http://sun.hasenbraten.de/vasm/) and [vlink](http://sun.hasenbraten.de/vlink/))\n* [AmigaOS NDK 3.2](https://www.hyperion-entertainment.com/index.php/downloads?view=files\u0026parent=40), unpacked on your build machine\n* [disassembler.library](http://aminet.net/package/util/libs/DisLib) by Thomas Richter, include files unpacked on your build machine\n* [lha](https://github.com/jca02266/lha)\n\nSet the `AMIGA_NDK` env variable to the location of the unpacked `NDK3.2` directory on your build machine. Also set `AMIGA_INCLUDES` to the location of 3rd party include files, where the `disassembler.library` includes can be found.\n\nThen just invoke `make` to build the project. The compiled project can be found in the `build` directory.\n\n`make release` will compile a release version in the `release` directory.\n\nToday's standard encoding is UTF-8. Unfortunately AmigaOS does not support this encoding, so the files in this project have different encodings depending on their purpose. The assembler files must use plain ASCII encoding, so they can be edited on Linux and Amiga without encoding problems. For special characters in strings, always use escape sequences. Do not use special characters in comments. `make check` will test if these files contain illegal characters. All purely Amiga-related files (like AmigaGuide files) are expected to be ISO-8859-1 encoded. Then again, `README.md` (and other files related to the open source release) are UTF-8 encoded. If you are in doubt, use plain ASCII.\n\n## Contribution and Releases\n\nThe source code of this project can be found [at the official Codeberg page](https://codeberg.org/shred/patchwork).\n\nIf you found a bug or have a feature request, feel free to [open an issue](https://codeberg.org/shred/patchwork/issues) or [send a pull request](https://codeberg.org/shred/patchwork/pulls).\n\nOfficial binaries are available [on the AmiNet](http://aminet.net/package/dev/debug/PatchWork).\n\n**Please keep the \"PatchWork\" package name reserved for official releases.** If you want to release a fork, use a different package name. But please consider contributing to the reference repository instead. This is better than having an unknown number of different versions circulating around.\n\n## License\n\n`PatchWork` is distributed under GPLv3 ([Gnu Public License](http://www.gnu.org/licenses/gpl.html)).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshred%2Fpatchwork","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshred%2Fpatchwork","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshred%2Fpatchwork/lists"}