| ... | ... |
@@ -5,6 +5,48 @@ Run [GLSL][] code on the CPU. |
| 5 | 5 |
[`glslrun`]: https://git.rcrnstn.net/rcrnstn/glslrun |
| 6 | 6 |
[GLSL]: https://en.wikipedia.org/wiki/OpenGL_Shading_Language |
| 7 | 7 |
|
| 8 |
+## Usage |
|
| 9 |
+ |
|
| 10 |
+`glslrun --help`: |
|
| 11 |
+ |
|
| 12 |
+``` |
|
| 13 |
+glslrun 1.0 |
|
| 14 |
+ |
|
| 15 |
+Run GLSL code snippets on the CPU. |
|
| 16 |
+ |
|
| 17 |
+usage: |
|
| 18 |
+ glslrun [options] [--] [<file>] |
|
| 19 |
+ glslrun -h|--help |
|
| 20 |
+ glslrun --version |
|
| 21 |
+ |
|
| 22 |
+arguments: |
|
| 23 |
+ <file> |
|
| 24 |
+ File containing code to run. Specify - to read from stdin instead. |
|
| 25 |
+ |
|
| 26 |
+options: |
|
| 27 |
+ -m, --main |
|
| 28 |
+ Generate an enclosing main() function. |
|
| 29 |
+ |
|
| 30 |
+ -p, --print |
|
| 31 |
+ Print the generated code that is passed to the compiler. |
|
| 32 |
+``` |
|
| 33 |
+ |
|
| 34 |
+## Dependencies |
|
| 35 |
+ |
|
| 36 |
+All dependencies are [POSIX][] and are highly likely to be installed by default |
|
| 37 |
+(e.g. they all have the [Debian priority][] `required`). |
|
| 38 |
+ |
|
| 39 |
+- `sh` (e.g. from [`bash`][] or [`dash`][]) |
|
| 40 |
+- `sed` (e.g. from [`sed`][]) |
|
| 41 |
+- `awk` (e.g. from [`mawk`][]) |
|
| 42 |
+ |
|
| 43 |
+[POSIX]: https://en.wikipedia.org/wiki/POSIX |
|
| 44 |
+[Debian priority]: https://www.debian.org/doc/debian-policy/ch-archive.html#s-priorities |
|
| 45 |
+[`bash`]: https://packages.debian.org/bash |
|
| 46 |
+[`dash`]: https://packages.debian.org/dash |
|
| 47 |
+[`sed`]: https://packages.debian.org/sed |
|
| 48 |
+[`mawk`]: https://packages.debian.org/mawk |
|
| 49 |
+ |
|
| 8 | 50 |
## License |
| 9 | 51 |
|
| 10 | 52 |
Licensed under the [ISC License][] unless otherwise noted, see the |
| 11 | 53 |
new file mode 100755 |
| ... | ... |
@@ -0,0 +1,61 @@ |
| 1 |
+#!/bin/sh |
|
| 2 |
+set -euC |
|
| 3 |
+ |
|
| 4 |
+##/// glslrun 1.0 |
|
| 5 |
+#//// |
|
| 6 |
+#//// Run GLSL code snippets on the CPU. |
|
| 7 |
+#//// |
|
| 8 |
+###// usage: |
|
| 9 |
+#//// glslrun [options] [--] [<file>] |
|
| 10 |
+#//// glslrun -h|--help |
|
| 11 |
+#//// glslrun --version |
|
| 12 |
+#//// |
|
| 13 |
+###// arguments: |
|
| 14 |
+####/ <file> |
|
| 15 |
+#//// File containing code to run. Specify - to read from stdin instead. |
|
| 16 |
+#//// |
|
| 17 |
+###// options: |
|
| 18 |
+####/ -m, --main |
|
| 19 |
+#//// Generate an enclosing main() function. |
|
| 20 |
+#//// |
|
| 21 |
+####/ -p, --print |
|
| 22 |
+#//// Print the generated code that is passed to the compiler. |
|
| 23 |
+ |
|
| 24 |
+## Messages |
|
| 25 |
+help() { sed -n 's|^#[#/]*/ \?||p' "$0"; exit 0; }
|
|
| 26 |
+version() { help | awk '/^$/{++p;next}p==0'; exit 0; }
|
|
| 27 |
+usage() { help | awk '/^$/{++p;next}p==2'; exit 0; }
|
|
| 28 |
+parse() { printf '%s: error: %s\n' "$0" "$1"; usage; exit 1; } >&2
|
|
| 29 |
+error() { printf '%s: error: %s\n' "$0" "$1"; exit 1; } >&2
|
|
| 30 |
+warning() { printf '%s: warning: %s\n' "$0" "$1"; } >&2
|
|
| 31 |
+opt() { [ $# -gt 1 ] || parse "option '$1' value not provided"; }
|
|
| 32 |
+arg() { [ $# -gt 1 ] || parse "argument '$1' not provided"; }
|
|
| 33 |
+ |
|
| 34 |
+## Parse special options |
|
| 35 |
+case "${1-}"
|
|
| 36 |
+in |
|
| 37 |
+ '-h'|'--help') help; ;; |
|
| 38 |
+ '--version') version; ;; |
|
| 39 |
+esac |
|
| 40 |
+ |
|
| 41 |
+## Parse options |
|
| 42 |
+main='' |
|
| 43 |
+print='' |
|
| 44 |
+while [ $# -gt 0 ] |
|
| 45 |
+do |
|
| 46 |
+ case "$1" |
|
| 47 |
+ in |
|
| 48 |
+ '-m'|'--main') main='y'; ;; |
|
| 49 |
+ '-p'|'--print') print='y'; ;; |
|
| 50 |
+ '--') shift; break; ;; |
|
| 51 |
+ '-'?*) parse "unrecognized option '$1'"; ;; |
|
| 52 |
+ *) break; ;; |
|
| 53 |
+ esac |
|
| 54 |
+ shift |
|
| 55 |
+done |
|
| 56 |
+ |
|
| 57 |
+## Parse optional arguments |
|
| 58 |
+file="${1-}"; shift $(($#>0));
|
|
| 59 |
+ |
|
| 60 |
+## Parse unrecognized arguments |
|
| 61 |
+[ $# -eq 0 ] || parse "unrecognized argument: '$1'" |