diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2022-07-02 16:59:45 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2022-07-02 16:59:45 -0700 |
commit | da98d5314731206cd03038d589d10c5c32a0ce8c (patch) | |
tree | 4b7dd002a5edda8f2e6561c29bf6aee80a3e9303 /cppawk-include | |
parent | 94ed05fe4df6a657884596bdabd03c7666a63de7 (diff) | |
download | cppawk-da98d5314731206cd03038d589d10c5c32a0ce8c.tar.gz cppawk-da98d5314731206cd03038d589d10c5c32a0ce8c.tar.bz2 cppawk-da98d5314731206cd03038d589d10c5c32a0ce8c.zip |
Restructure cppawk installation.
cppawk now expects to be installed in some directory (typically "bin"),
such that the include files are in a "share/cppawk/include" directory
where "share" is a sibling of "bin".
The git repository is restructured to match this shape; cppawk is
moved into "bin", and the include files into "share/cppawk/include".
Diffstat (limited to 'cppawk-include')
-rw-r--r-- | cppawk-include/array.h | 98 | ||||
-rw-r--r-- | cppawk-include/base.h | 60 | ||||
-rw-r--r-- | cppawk-include/case-priv.h | 93 | ||||
-rw-r--r-- | cppawk-include/case.h | 46 | ||||
-rw-r--r-- | cppawk-include/cons-priv.h | 906 | ||||
-rw-r--r-- | cppawk-include/cons.h | 92 | ||||
-rw-r--r-- | cppawk-include/field.h | 88 | ||||
-rw-r--r-- | cppawk-include/fun-priv.h | 50 | ||||
-rw-r--r-- | cppawk-include/fun.h | 39 | ||||
-rw-r--r-- | cppawk-include/iter-priv.h | 45 | ||||
-rw-r--r-- | cppawk-include/iter.h | 329 | ||||
-rw-r--r-- | cppawk-include/narg-priv.h | 367 | ||||
-rw-r--r-- | cppawk-include/narg.h | 44 | ||||
-rw-r--r-- | cppawk-include/varg-priv.h | 392 | ||||
-rw-r--r-- | cppawk-include/varg.h | 46 |
15 files changed, 0 insertions, 2695 deletions
diff --git a/cppawk-include/array.h b/cppawk-include/array.h deleted file mode 100644 index f3b7a22..0000000 --- a/cppawk-include/array.h +++ /dev/null @@ -1,98 +0,0 @@ -// cppawk: C preprocessor wrapper around awk -// Copyright 2022 Kaz Kylheku <kaz@kylheku.com> -// -// BSD-2 License -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. - -#ifndef __CPPAWK_ARRAY_H -#define __CPPAWK_ARRAY_H - -#ifndef __CPPAWK_BASE_H -#include "base.h" -#endif - -#ifndef __CPPAWK_ITER_PRIV_H -#include "iter-priv.h" -#endif - -#ifndef __CPPAWK_CONS_PRIV_H -#include "cons-priv.h" -#endif - -#if __have_indirect_functions -#ifndef __CPPAWK_FUN_PRIV_H -#include "fun-priv.h" -#endif -#endif - -function fields_to_array(__to_array, - __i, __val) -{ - delete __to_array - - __to_array[0] = $0 - - __dofields (__i, __val) - __to_array[__i] = __val -} - -function array_to_fields(__from_array, - __i, __val) -{ - for (__i = 0; ; __i++) - if (__i in __from_array) - $__i = __from_array[__i] - else - break -} - -#if __have_indirect_functions - -function maparray(__fun, __from_array, __to_array) -{ - delete __to_array - __doarray (key, value, __from_array) - __to_array[key] = __call(__fun, value) -} - -function group_by(__fun, __list, __to_array, - __item, __key) -{ - delete __to_array - - __dolist (__item, __list) { - __key = __call(__fun, __item) - if (__key in __to_array) - __to_array[__key] = __list_add(__to_array[__key], __item) - else - __to_array[__key] = __list_add(__list_begin(), __item) - } - - for (__key in __to_array) - __to_array[__key] = __list_end(__to_array[__key]) -} - -#endif - -#endif diff --git a/cppawk-include/base.h b/cppawk-include/base.h deleted file mode 100644 index 4012d95..0000000 --- a/cppawk-include/base.h +++ /dev/null @@ -1,60 +0,0 @@ -// cppawk: C preprocessor wrapper around awk -// Copyright 2022 Kaz Kylheku <kaz@kylheku.com> -// -// BSD-2 License -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. - -#ifndef __CPPAWK_BASE_H -#define __CPPAWK_BASE_H - -#if __gawk__ && !defined __gawk_ver -#define __gawk_ver 040000 -#endif - -#define __cat(a, b) a ## b -#define __xcat(a, b) __cat(a, b) -#define __str(x) # x -#define __xstr(x) __str(x) -#define __g(name) __xcat(__, __xcat(name, __LINE__)) -#define __gx(name, ext) __xcat(__, __xcat(name, __xcat(ext, __LINE__))) - -#define __error(...) { printf(__VA_ARGS__); print; exit 1 } - -#define __present(arg) ((arg) != "" || (arg) != 0) - -#if __egawk__ -#define __let(...) @let (__VA_ARGS__) -#define __have_let 1 -#else -#define __let(...) -#endif - -#if __gawk__ -#define __have_switch 1 -#if __gawk_ver >= 040000 || __egawk__ -#define __have_indirect_functions 1 -#endif -#endif - -#endif diff --git a/cppawk-include/case-priv.h b/cppawk-include/case-priv.h deleted file mode 100644 index 825ed1b..0000000 --- a/cppawk-include/case-priv.h +++ /dev/null @@ -1,93 +0,0 @@ -// cppawk: C preprocessor wrapper around awk -// Copyright 2022 Kaz Kylheku <kaz@kylheku.com> -// -// BSD-2 License -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. - -#ifndef __CPPAWK_CASE_PRIV_H -#define __CPPAWK_CASE_PRIV_H - -#ifndef __CPPAWK_NARG_PRIV -#include "narg-priv.h" -#endif - -#ifndef __CPPAWK_BASE_H -#include "base.h" -#endif - -#if __have_switch - -#define __ca_first(x) case x: -#define __ca_next(p, x) p case x: - -#define __mx_first(x) __of(x) -#define __mx_next(p, x) p case x: - -#define __case_temps __ign -#define __case(expr) switch (expr) -#define __of(...) __varexpand(__ca_first, __ca_next, __VA_ARGS__) {{{ -#define __matching(...) __varexpand(__ca_first, __ca_next, __VA_ARGS__) {{{ -#define __mixed(x, y) __varexpand(__ca_first, __ca_next, __splice(x)) \ - __varexpand(__ca_first, __ca_next, __splice(y)) {{{ -#define __cbreak break; }}} -#define __cfall }}} -#define __cret(val) return val; }}} -#define __otherwise default: {{{ - -#else - -#define __clause(expr) if (__pass || (expr) && (__pass = 1)) -#define __of_first(x) (__val == (x)) -#define __of_next(p, x) p || (__val == (x)) -#define __mtch_first(x) (__val ~ (x)) -#define __mtch_next(p, \ - x) p || (__val ~ (x)) - -#if !__have_let -#define __case_temps __val, __once, __pass -#else -#define __case_temps __ign -#endif - -#define __case(expr) __let (__val, __once, __pass) \ - for ((__once = 1) && (__pass = 0) || (__val = expr); \ - __once; \ - __once = 0) -#define __of(...) __clause(__varexpand(__of_first, __of_next, \ - __VA_ARGS__)) {{{ -#define __matching(...) __clause(__varexpand(__mtch_first, mtch_next, \ - __VA_ARGS__)) {{{ -#define __mixed(x, y) __clause(__varexpand(__of_first, __of_next, \ - __splice(x)) || \ - __varexpand(__mtch_first, __mtch_next, \ - __splice(y))) {{{ -#define __cbreak break; }}} -#define __creturn(val) return val; }}} -#define __cfall }}} -#define __cret(val) return val; }}} -#define __otherwise if (__pass = 1) {{{ - -#endif - -#endif diff --git a/cppawk-include/case.h b/cppawk-include/case.h deleted file mode 100644 index d5ed331..0000000 --- a/cppawk-include/case.h +++ /dev/null @@ -1,46 +0,0 @@ -// cppawk: C preprocessor wrapper around awk -// Copyright 2022 Kaz Kylheku <kaz@kylheku.com> -// -// BSD-2 License -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. - -#ifndef __CPPAWK_CASE_H -#define __CPPAWK_CASE_H - -#ifndef __CPPAWK_CASE_PRIV_H -#include "case-priv.h" -#endif - -#define case_temps __case_temps -#define case(expr) __case(expr) -#define of(...) __of(__VA_ARGS__) -#define matching(...) __matching(__VA_ARGS__) -#define mixed(...) __mixed(__VA_ARGS__) -#define cbreak __cbreak -#define cfall __cfall -#define cret(val) __cret(val) -#define then __do -#define otherwise __otherwise - -#endif diff --git a/cppawk-include/cons-priv.h b/cppawk-include/cons-priv.h deleted file mode 100644 index 172f20f..0000000 --- a/cppawk-include/cons-priv.h +++ /dev/null @@ -1,906 +0,0 @@ -// cppawk: C preprocessor wrapper around awk -// Copyright 2022 Kaz Kylheku <kaz@kylheku.com> -// -// BSD-2 License -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. - -#ifndef __CPPAWK_CONS_PRIV_H -#define __CPPAWK_CONS_PRIV_H - -#ifndef __CPPAWK_BASE_H -#include "base.h" -#endif - -#ifndef __CPPAWK_ITER_PRIV_H -#include "iter-priv.h" -#endif - -#ifndef __CPPAWK_CASE_PRIV_H -#include "case-priv.h" -#endif - -#ifndef __CPPAWK_NARG_PRIV_H -#include "narg-priv.h" -#endif - -#if __have_indirect_functions -#ifndef __CPPAWK_FUN_PRIV_H -#include "fun-priv.h" -#endif -#endif - -#define __nil "" - -#define __prog_first(expr) ((expr) || 1) -#define __prog_next(prev, \ - expr) prev && ((expr) || 1) -#define __prog(...) (__varexpand(__prog_first, __prog_next, \ - __VA_ARGS__)) - -#define __progn_first(expr) (expr) -#define __progn_next(prev, \ - next) ((prev || 1) ? (next) : 0) -#define __progn(...) __varexpand(__progn_first, __progn_next, \ - __VA_ARGS__) - -#define __or_first(expr) (expr) -#define __or_next(prev, \ - next) ((__g(or) = prev) ? __g(or) : (next)) -#define __or(...) __varexpand(__or_first, __or_next, \ - __VA_ARGS__) - -#define __and_first(expr) (expr) -#define __and_next(prev, \ - next) ((__g(and) = prev) ? next : __g(and)) -#define __and(...) __varexpand(__and_first, __and_next, \ - __VA_ARGS__) - - -#define __push(item, list) (list = __cons(item, list)) - -#define __pop(list) (__progn(__g(ol) = (list), \ - list = __cdr(__g(ol)), \ - __car(__g(ol)))) - -#define __dolist(item, list) \ - for (__g(i) = list; \ - !__endp(__g(i)) && ((item = __car(__g(i))) || 1); \ - __g(i) = __cdr(__g(i))) - -#define __dolisti(item, index, list) \ - for (__prog(__g(i) = list, index = 0); \ - !__endp(__g(i)) && ((item = __car(__g(i))) || 1); \ - __prog(__g(i) = __cdr(__g(i)), index++)) - -#define __doconses(iter, list) \ - for (iter = list; __consp(iter); iter = __cdr(iter)) - -#define __list_begin() "" -#define __list_add(stk, item) __pack(stk, item) -#define __list_end(stk) __unpack(stk, __nil) -#define __list_end_atom(stk, atom) __unpack(stk, atom) - -#define __bag_init_first(x) (x = __list_begin()) -#define __bag_init_next(p, x) (p || 1) && __bag_init_first(x) - -#define __bag_done_first(x) (x = __list_end(x)) -#define __bag_done_next(p, x) (p || 1) && __bag_done_first(x) - -#define __bags(...) for ((__g(once) = 1) && \ - __varexpand(__bag_init_first, \ - __bag_init_next, \ - __VA_ARGS__); \ - __g(once) || \ - __varexpand(__bag_done_first, \ - __bag_done_next, \ - __VA_ARGS__) && 0; \ - __g(once) = 0) -#define __bag(bag, expr) bag = __list_add(bag, expr) - -#define __typecode(obj) (substr(obj, 1, 1)) - -function __consp(__obj) -{ - return __typecode(__obj) == "C" -} -#define __consp(obj) (__typecode(obj) == "C") - -function __atom(__obj) -{ - return __typecode(__obj) != "C" -} -#define __atom(obj) (__typecode(obj) != "C") - -function __null(__obj) -{ - return __obj == __nil && __obj != 0 -} - -function __endp(__obj) -{ - if (__obj == __nil && __obj != 0) - return 1 - if (__consp(__obj)) - return 0 - __error("endp: a proper list ends with nil, not %s", __obj) -} - -function __bs_esc(raw) -{ - gsub(/[\\\042]/, "\\\\&", raw) - return raw -} - -function __numberp(__obj) -{ - return __obj != "" && (__obj == 0 || __obj + 0 != 0) -} -#define __numberp(obj) (obj != "" && ((obj) == 0 || (obj) + 0 != 0)) - -function __stringp(__obj) -{ - return __typecode(__obj) == "T" -} -#define __stringp(obj) (__typecode(obj) == "T") - -function __symbolp(__obj) -{ - return __obj != 0 && __typecode(__obj) ~ /^S?$/ -} - -function __box(__raw, - __check, - __case_temps) -{ - if (!__present(__raw)) - return "U"; - - if (__present(__check)) - __error("box; excess argument %s", __check) - - if (__numberp(__raw)) - return __raw; - - return "T" __raw; -} - -function __unbox(__obj, - __check, - __case_temps) -{ - if (!__present(__obj)) - __error("unbox: missing or undefined argument") - - if (__present(__check)) - __error("unbox; excess argument %s", __check) - - __case (__typecode(__obj)) { - __of ("T", "S") - __cret (substr(__obj, 2)) - __of ("C") - __error("unbox: %s looks like a cons", __obj) - __cbreak - __of ("U") - __cret(__check) - __of ("") - __cret("nil") - __otherwise - if (!__numberp(__obj)) - __error("unbox: %s isn't symbol, number or boxed string", __obj) - __cret (__obj) - } -} - -function __box_str(__str) -{ - return "T" __str -} -#define __box_str(str) ("T" (str)) - -function __box_sym(__name) -{ - return __name == "nil" ? __nil : "S" __name -} - -function __cons(__a, __d) -{ - return "C" length(__a) "," length(__d) ":" __a __d -} - -function __car(__cell, - __col, __com, len) -{ - if (__consp(__cell)) { - __col = match(__cell, /:/) - __com = match(__cell, /,/) - if (__col == 0 || __com == 0 || __col <= __com) - __error("car: %s has a malformed cons header", __cell) - len = substr(__cell, 2, __com - 2 + 1) - return substr(__cell, __col + 1, len) - } else if (__null(__cell)) { - return __nil - } else { - __error("car: %s isn't a cons", __cell) - } -} - -function __cdr(__cell, - __col, __com, __alen, __dlen) -{ - if (__consp(__cell)) { - __col = match(__cell, /:/) - __com = match(__cell, /,/) - if (__col == 0 || __com == 0 || __col <= __com) - __error("cdr: %s has a malformed cons header", __cell) - __alen = substr(__cell, 2, __com - 2 + 1) - __dlen = substr(__cell, __com + 1, __col - __com) - return substr(__cell, __col + 1 + __alen, __dlen) - } else if (__null(__cell)) { - return __nil - } else { - __error("cdr: %s isn't a cons", __cell) - } -} - -function __sexp(__obj, - __d, __x, __y, __case_temps) -{ - if (!__present(__obj)) - __error("sexp: missing or undefined argument") - - __case (__typecode(__obj)) { - __of ("C") - __d = __cdr(__obj) - __x = __sexp(__car(__obj)) - if (__null(__d)) { - return "(" __x ")" - } else { - __y = __sexp(__d) - if (__typecode(__d) == "C") - return "(" __x " " substr(__y, 2) - else - return "(" __x " . " __y ")" - } - __cbreak - __of ("T") - __cret ("\"" __bs_esc(substr(__obj, 2)) "\"") - __of ("S") - __cret (__bs_esc(substr(__obj, 2))) - __of ("U") - __cret ("#U") - } - - if (__numberp(__obj)) { - return __obj - } else if (__null(__obj)) { - return "nil" - } else { - return "\"" __bs_esc(__obj) "\"" - } -} - -function __reverse(__lst, - __tmp) -{ - __tmp = __nil - - while (!__endp(__lst)) { - __push(__car(__lst), __tmp); - __lst = __cdr(__lst); - } - - return __tmp; -} - -function __values(__arr, - __tmp, __key, __value) -{ - __tmp = __list_begin() - - __doarray (__key, __value, __arr) - __tmp = __list_add(__tmp,__value) - - return __list_end(__tmp) -} - -function __keys(__array, - __key, __tmp) -{ - __tmp = __list_begin() - - for (__key in __array) - __tmp = __list_add(__tmp, __key) - - return __list_end(__tmp) -} - - -function __fields(__start, __count, - __tmp, __end, __val) -{ - if (!__present(__start)) - __start = 1 - - if (!__present(__count)) - __count = NF - __start + 1 - - if (__count < 1) - return __nil - - __end = __start + __count - 1 - - if (__end > NF) - __end = NF - - if (__start < 1) - __start = 1 - - if (__start > __end) - return __nil - - __tmp = __list_begin() - - for (; __start <= __end; __start++) - __tmp = __list_add(__tmp, $(__start)) - - return __list_end(__tmp) -} - -function __set_fields(__lst, __start, - __tmp, __item, __n) -{ - if (!__present(__start)) - __start = 1 - - __dolisti (__item, __n, __lst) - $(__n + __start) = __item - - NF = __n + __start - 1 - - return __n -} - -function __equal(__obj1, __obj2) -{ - if (__obj1 == __obj2) - return 1; - return __slow_equal(__obj1, __obj2) -} -#define __equal(obj1, obj2) ((obj1) == (obj2) ? 1 : __slow_equal(obj1, obj2)) - -function __slow_equal(__obj1, __obj2, - __tc1, __tc2, __case_temps) -{ - __tc1 = __typecode(__obj1) - __tc2 = __typecode(__obj2) - - __case (__tc1 __tc2) { - __of ("CC") - __cret (__equal(__car(__obj1), __car(__obj2)) && - __equal(__cdr(__obj1), __cdr(__obj2))) - __matching (/[UTSC][UTSC]/) - __cret (0); - } - - if (__tc1 == "T") - return __numberp(__obj2) ? 0 : (__obj1 == __box_str(__obj2)) - - if (__tc2 == "T") - return __numberp(__obj1) ? 0 : (__box_str(__obj1) == __obj2) - - if (__numberp(__obj1) && __numberp(__obj2)) - return __obj1 + 0 == __obj2 + 0 - - return 0 -} - -function __equalize(__obj, - __tc, __str) -{ - if (!__present(__obj)) - return "" - - __tc = __typecode(__obj) - - __case (__tc) { - __of("C") - __cret (__cons(__equalize(__car(__obj)), - __equalize(__cdr(__obj)))) - __of("T", "S", "U", "") - __cret (__obj) - } - - if (__numberp(__obj)) - return __obj + 0 - - return __box_str(__obj) -} - -function __pack(__stk, __item) -{ - return length(__item) ":" __item __stk -} - -function __unpack(__stk, __out, - __col) -{ - while (__stk != "") { - __col = match(__stk, /:/) - if (__col == 0) - break; - __push(substr(__stk, __col + 1, __stk), __out) - __stk = substr(__stk, __col + 1 + __stk); - } - - return __out -} - -#ifndef __CPPAWK_VARG_PRIV_H -#include "varg-priv.h" -#endif - -function __list(__rest, - __check) -{ - return __arglist("list", __rest, __check) -} -#define __list_first(item) __cons(item, __nil) -#define __list_next(list, item) __cons(item, list) -#define __li(...) __varexpand(__list_first, \ - __list_next, \ - __revarg(__VA_ARGS__)) - -#define __listar_first(item) item -#define __listar(...) __varexpand(__listar_first, \ - __list_next, \ - __revarg(__VA_ARGS__)) - -function __append2(__left, __right, - tmp) -{ - tmp = __reverse(__left) - while (!__endp(tmp)) - __right = __cons(__pop(tmp), __right) - return __right -} - -function __append(__rest, - __count, __out) -{ - __varg_count("append", __count, __count) - __out = __nil - __case (__count) { - __of (32) - __out = __r32 - __cbreak - __of (31) - __out = __r31 - __cbreak - __of (30) - __out = __r30 - __cbreak - __of (29) - __out = __r29 - __cbreak - __of (28) - __out = __r28 - __cbreak - __of (27) - __out = __r27 - __cbreak - __of (26) - __out = __r26 - __cbreak - __of (25) - __out = __r25 - __cbreak - __of (24) - __out = __r24 - __cbreak - __of (23) - __out = __r23 - __cbreak - __of (22) - __out = __r22 - __cbreak - __of (21) - __out = __r21 - __cbreak - __of (20) - __out = __r20 - __cbreak - __of (19) - __out = __r19 - __cbreak - __of (18) - __out = __r18 - __cbreak - __of (17) - __out = __r17 - __cbreak - __of (16) - __out = __r16 - __cbreak - __of (15) - __out = __r15 - __cbreak - __of (14) - __out = __r14 - __cbreak - __of (13) - __out = __r13 - __cbreak - __of (12) - __out = __r12 - __cbreak - __of (11) - __out = __r11 - __cbreak - __of (10) - __out = __r10 - __cbreak - __of (9) - __out = __r9 - __cbreak - __of (8) - __out = __r8 - __cbreak - __of (7) - __out = __r7 - __cbreak - __of (6) - __out = __r6 - __cbreak - __of (5) - __out = __r5 - __cbreak - __of (4) - __out = __r4 - __cbreak - __of (3) - __out = __r3 - __cbreak - __of (2) - __out = __r2 - __cbreak - __of (1) - __out = __r1 - __cbreak - } - __case (__count - 1) { - __of (31) - __out = __append2(__r31, __out) - __cfall - __of (30) - __out = __append2(__r30, __out) - __cfall - __of (29) - __out = __append2(__r29, __out) - __cfall - __of (28) - __out = __append2(__r28, __out) - __cfall - __of (27) - __out = __append2(__r27, __out) - __cfall - __of (26) - __out = __append2(__r26, __out) - __cfall - __of (25) - __out = __append2(__r25, __out) - __cfall - __of (24) - __out = __append2(__r24, __out) - __cfall - __of (23) - __out = __append2(__r23, __out) - __cfall - __of (22) - __out = __append2(__r22, __out) - __cfall - __of (21) - __out = __append2(__r21, __out) - __cfall - __of (20) - __out = __append2(__r20, __out) - __cfall - __of (19) - __out = __append2(__r19, __out) - __cfall - __of (18) - __out = __append2(__r18, __out) - __cfall - __of (17) - __out = __append2(__r17, __out) - __cfall - __of (16) - __out = __append2(__r16, __out) - __cfall - __of (15) - __out = __append2(__r15, __out) - __cfall - __of (14) - __out = __append2(__r14, __out) - __cfall - __of (13) - __out = __append2(__r13, __out) - __cfall - __of (12) - __out = __append2(__r12, __out) - __cfall - __of (11) - __out = __append2(__r11, __out) - __cfall - __of (10) - __out = __append2(__r10, __out) - __cfall - __of (9) - __out = __append2(__r9, __out) - __cfall - __of (8) - __out = __append2(__r8, __out) - __cfall - __of (7) - __out = __append2(__r7, __out) - __cfall - __of (6) - __out = __append2(__r6, __out) - __cfall - __of (5) - __out = __append2(__r5, __out) - __cfall - __of (4) - __out = __append2(__r4, __out) - __cfall - __of (3) - __out = __append2(__r3, __out) - __cfall - __of (2) - __out = __append2(__r2, __out) - __cfall - __of (1) - __out = __append2(__r1, __out) - __cfall - } - - return __out -} - -function __member(__item, __lst) -{ - while (!__endp(__lst)) { - if (__equal(__item, __car(__lst))) - return __lst; - __lst = __cdr(__lst) - } - - return __nil -} - -function __position(__item, __lst, - __pos) -{ - for (__pos = 0; !__endp(__lst); __pos++) { - if (__equal(__item, __car(__lst))) - return __pos; - __lst = __cdr(__lst) - } - - return __nil -} - -function __nth(__pos, __lst) -{ - for (; __pos > 0 && !__endp(__lst); __pos--) - __lst = __cdr(__lst) - return __pos == 0 ? __car(__lst) : __nil -} - -function __nthcdr(__pos, __lst) -{ - for (; __pos > 0 && !__endp(__lst); __pos--) - __lst = __cdr(__lst) - return __lst -} - -function __ldiff(__main, __tail, - __out, __iter) -{ - if (__null(__main)) - return __nil - - if (__null(__tail)) - return __main - - __out = __list_begin() - - __doconses (__iter, __main) { - if (__iter == __tail) - break - __out = __list_add(__out, __car(__iter)) - } - - if (__atom(__iter) && __iter != __tail) - return __list_end_atom(__out, __iter) - - return __list_end(__out) -} - -function __last(__lst, __n, - __circbuf, __i) -{ - if (!__present(__n)) - __n = 1 - else if (__n < 0) - __error("last: number argument %s must be non-negative", __n) - - if (__n == 0) { - __doconses (__iter, __lst) - ; // nothing - return __iter - } - - delete __circbuf - - __i = 0 - - __n++ - - __doconses (__iter, __lst) - __circbuf[__i++ % __n] = __iter - - __i = (__i + 1) % __n - - return (__i in __circbuf) ? __circbuf[__i] : __lst -} - -function __butlast(__lst, __n, - __circbuf, __i, __out) -{ - if (!__present(__n)) - __n = 1 - else if (__n < 0) - __error("butlast: number argument %s must be non-negative", __n) - - __out = __list_begin() - - if (__n == 0) { - __doconses (__iter, __lst) - __out = __list_add(__out, __car(__iter)) - return __list_end(__out) - } - - delete __circbuf - - __i = 0 - - __n++ - - __doconses (__iter, __lst) { - __circbuf[__i++ % __n] = __out - __out = __list_add(__out, __car(__iter)) - } - - __i = (__i + 1) % __n - - return (__i in __circbuf) ? __list_end(__circbuf[__i]) : __nil -} - -function __iota(__from, __to, __delta, - __out, __i, __val) -{ - __out = __list_begin(); - - if (__from < __to) { - if (!__present(__delta)) - __delta = 1 - - if (__delta <= 0) - return __nil; - - __i = 0 - __val = __from - - while (__val <= __to) { - __out = __list_add(__out, __val) - __i++ - __val = __from + (__i * __delta) - } - } else if (__from > __to) { - if (!__present(__delta)) - __delta = -1 - - if (__delta >= 0) - return __nil; - - __i = 0 - __val = __from - - while (__val >= __to) { - __out = __list_add(__out, __val) - __i++ - __val = __from + (__i * __delta) - } - } else { - return __list(__from) - } - - return __list_end(__out) -} - -function __uniq(__lst, - __out, __item, __seen) -{ - __out = __list_begin(); - - __dolist(__item, __lst) { - if (__item in __seen) - continue - __seen[__item] - __out = __list_add(__out, __item) - } - - return __list_end(__out) -} - -function __uniqual(__lst, - __out, __item, __itemeq, __seen) -{ - __out = __list_begin(); - - __dolist(__item, __lst) { - __itemq = __equalize(__item) - if (__itemq in __seen) - continue - __seen[__itemq] - __out = __list_add(__out, __item) - } - - return __list_end(__out) -} - - -#if __have_indirect_functions - -function __mapcar(__fun, __lst, - __temp, __item, out) -{ - __temp = __list_begin() - __dolist(__item, __lst) - __temp = __list_add(__temp, __call(__fun, __item)) - return __list_end(__temp) -} - -function __mappend(__fun, __lst, - __temp, __item, out) -{ - __temp = __nil - __dolist(__item, __lst) - __temp = __append2(__temp, __call(__fun, __item)) - return __temp -} - -#endif - -#endif diff --git a/cppawk-include/cons.h b/cppawk-include/cons.h deleted file mode 100644 index f120c0c..0000000 --- a/cppawk-include/cons.h +++ /dev/null @@ -1,92 +0,0 @@ -// cppawk: C preprocessor wrapper around awk -// Copyright 2022 Kaz Kylheku <kaz@kylheku.com> -// -// BSD-2 License -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. - -#ifndef __CPPAWK_CONS_H -#define __CPPAWK_CONS_H - -#ifndef __CPPAWK_CONS_PRIV_H -#include "cons-priv.h" -#endif - -#define nil __nil -#define prog(...) __prog(__VA_ARGS__) -#define progn(...) __progn(__VA_ARGS__) -#define or(...) __or(__VA_ARGS__) -#define and(...) __and(__VA_ARGS__) -#define push(item, list) __push(item, list) -#define pop(list) __pop(list) -#define dolist(item, list) __dolist(item, list) -#define dolisti(item, index, list) __dolisti(item, index, list) -#define doconses(iter, list) __doconses(iter, list) -#define list_begin() __list_begin() -#define list_add(stk, item) __list_add(stk, item) -#define list_end(stk) __list_end(stk) -#define list_end_atom(stk, atom) __list_end_atom(stk, atom) -#define bags(...) __bags(__VA_ARGS__) -#define bag(bag, expr) __bag(bag, expr) -#define consp __consp -#define atom __atom -#define null __null -#define endp __endp -#define false __false -#define true __true -#define numberp __numberp -#define stringp __stringp -#define symbolp __symbolp -#define box __box -#define unbox __unbox -#define box_str __box_str -#define box_sym __box_sym -#define cons __cons -#define car __car -#define cdr __cdr -#define sexp __sexp -#define reverse __reverse -#define values __values -#define keys __keys -#define fields __fields -#define set_fields __set_fields -#define equal __equal -#define equalize __equalize -#define list __list -#define li __li -#define listar __listar -#define append __append -#define member __member -#define position __position -#define nth __nth -#define nthcdr __nthcdr -#define ldiff __ldiff -#define last __last -#define butlast __butlast -#define iota __iota -#define uniq __uniq -#define uniqual __uniqual -#define mapcar __mapcar -#define mappend __mappend - -#endif diff --git a/cppawk-include/field.h b/cppawk-include/field.h deleted file mode 100644 index a18000d..0000000 --- a/cppawk-include/field.h +++ /dev/null @@ -1,88 +0,0 @@ -// cppawk: C preprocessor wrapper around awk -// Copyright 2022 Kaz Kylheku <kaz@kylheku.com> -// -// BSD-2 License -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. - -#ifndef __CPPAWK_FIELD_H -#define __CPPAWK_FIELD_H - -#ifndef __CPPAWK_BASE_H -#include "base.h" -#endif - -#ifndef __CPPAWK_NARG_PRIV_H -#include "narg-priv.h" -#endif - -function delf(__at, __count, - __i, __j) -{ - if (!__present(__count)) - __count = 1 - - if (0 < __count && 1 <= __at && __at <= NF) { - __i = __at - __j = __at + __count - - while (__j <= NF) - $(__i++) = $(__j++) - - NF = __i - 1; - } -} - -function __insf(__at, __count, - __i, __j) -{ - if (!__present(__count)) - __count = 1 - - if (NF < __at) - NF = __at - 1 - - if (0 < __count && 1 <= __at) { - __i = NF + __count - __j = NF - - NF = __i - - while (__j >= __at) - $(__i--) = $(__j--) - return 1 - } - - return 0 -} - -#define __insf_first(arg, n, at) $(at + n - 1) = arg -#define __insf_next(prev, arg, n, at) prev; $(at + n - 1) = arg - -#define insf(at, ...) { \ - if (__insf(at, __narg(__VA_ARGS__))) { \ - __variaexpand(__insf_first, __insf_next, at, __VA_ARGS__); \ - } \ -} - -#endif diff --git a/cppawk-include/fun-priv.h b/cppawk-include/fun-priv.h deleted file mode 100644 index 0f92a44..0000000 --- a/cppawk-include/fun-priv.h +++ /dev/null @@ -1,50 +0,0 @@ -// cppawk: C preprocessor wrapper around awk -// Copyright 2022 Kaz Kylheku <kaz@kylheku.com> -// -// BSD-2 License -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. - -#ifndef __CPPAWK_FUN_PRIV_H -#define __CPPAWK_FUN_PRIV_H - -#ifndef __CPPAWK_BASE_H -#include "base.h" -#endif - -#ifndef __CPPAWK_CONS_H -#include "cons-priv.h" -#endif - -#if !__have_indirect_functions -#warning "<fun.h> requires an Awk with function indirection like newer GNU Awk" -#endif - -#define __bind(fname, env) __cons(__xstr(fname), env) -#define __fun_(fname) __xstr(fname) -#define __call(fobj, ...) (__consp(fobj) \ - ? __progn(__g(f) = __car(fobj), \ - @__g(f)(__cdr(fobj), ## __VA_ARGS__)) \ - : @fobj(__VA_ARGS__)) - -#endif diff --git a/cppawk-include/fun.h b/cppawk-include/fun.h deleted file mode 100644 index 6600609..0000000 --- a/cppawk-include/fun.h +++ /dev/null @@ -1,39 +0,0 @@ -// cppawk: C preprocessor wrapper around awk -// Copyright 2022 Kaz Kylheku <kaz@kylheku.com> -// -// BSD-2 License -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. - -#ifndef __CPPAWK_FUN_H -#define __CPPAWK_FUN_H - -#ifndef __CPPAWK_FUN_PRIV_H -#include "fun-priv.h" -#endif - -#define bind(fname, env) __bind(fname, env) -#define fun(fname) __fun_(fname) -#define call(...) __call(__VA_ARGS__) - -#endif diff --git a/cppawk-include/iter-priv.h b/cppawk-include/iter-priv.h deleted file mode 100644 index 946c874..0000000 --- a/cppawk-include/iter-priv.h +++ /dev/null @@ -1,45 +0,0 @@ -// cppawk: C preprocessor wrapper around awk -// Copyright 2022 Kaz Kylheku <kaz@kylheku.com> -// -// BSD-2 License -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. - -#ifndef __CPPAWK_ITER_PRIV_H -#define __CPPAWK_ITER_PRIV_H - -#define __doarray(key, value, arr) \ - for (key in arr) \ - if ((value = arr[key]) || 1) - -#define __dostring(index, chr, str) \ - __g(s) = str; \ - __g(l) = length(__g(s)); \ - for (index = 1; index <= __g(l); i++) \ - if ((chr = substr(__g(s), index, 1)) || 1) - -#define __dofields(index, val) \ - for (index = 1; index <= NF; index++) \ - if ((val = $ index) || 1) - -#endif diff --git a/cppawk-include/iter.h b/cppawk-include/iter.h deleted file mode 100644 index 53bb43f..0000000 --- a/cppawk-include/iter.h +++ /dev/null @@ -1,329 +0,0 @@ -// cppawk: C preprocessor wrapper around awk -// Copyright 2022 Kaz Kylheku <kaz@kylheku.com> -// -// BSD-2 License -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. - -#ifndef __CPPAWK_ITER_H -#define __CPPAWK_ITER_H - -#ifndef __CPPAWK_ITER_PRIV_H -#include "iter-priv.h" -#endif - -#ifndef __CPPAWK_BASE_H -#include "base.h" -#endif - -#ifndef __CPPAWK_NARG_PRIV_H -#include "narg-priv.h" -#endif - -#ifndef __CPPAWK_CONS_PRIV_H -#include "cons-priv.h" -#endif - -#define doarray(key, value, arr) __doarray(key, value, arr) -#define dostring(index, chr, str) __dostring(index, chr, str) -#define dofields(index, val) __dofields(index, val) - -#define loop(...) __loop_temp(__VA_ARGS__) \ - for (__loop_init(__VA_ARGS__); \ - (__loop_test(__VA_ARGS__) || \ - __loop_fini(__VA_ARGS__)) && \ - __loop_prep(__VA_ARGS__); \ - __loop_step(__VA_ARGS__)) - -#if __have_let -#define __loop_temp(...) __let(__varexpand(__temp_first, __temp_next, \ - __VA_ARGS__)) -#else -#define __loop_temp(...) -#endif - -#define __loop_init(...) __prog(__varexpand(__init_first, __init_next, \ - __VA_ARGS__)) -#define __loop_test(...) __nd(__varexpand(__test_first, __test_next, \ - __VA_ARGS__)) -#define __loop_prep(...) __prog(__varexpand(__prep_first, __prep_next, \ - __VA_ARGS__)) -#define __loop_fini(...) __prog(__varexpand(__fini_first, __fini_next, \ - __VA_ARGS__)) && 0 -#define __loop_step(...) __prog(__varexpand(__step_first, __step_next, \ - __VA_ARGS__)) - -#define __nd(...) __varexpand(__nd_first, __nd_next, __VA_ARGS__) -#define __nd_first(x) (x) -#define __nd_next(p, x) p && (x) - -#define loop_nest(...) __varexpand2(__cross_first, __cross_next, __VA_ARGS__) - -#define __cross_first(args) for (__init_ ## args; \ - ((__test_ ## args) || \ - (__fini_ ## args) && 0) && \ - __prep_ ## args; \ - __step_ ## args) -#define __cross_next(prev, args) prev __cross_first(args) - -#define __temp_first(args) __temp_ ## args -#define __temp_next(prev, args) prev __temp_ ## args - -#define __init_first(args) __init_ ## args -#define __init_next(prev, args) prev, __init_ ## args - -#define __test_first(args) __test_ ## args -#define __test_next(prev, args) prev, __test_ ## args - -#define __prep_first(args) __prep_ ## args -#define __prep_next(prev, args) prev, __prep_ ## args - -#define __fini_first(args) __fini_ ## args -#define __fini_next(prev, args) prev, __fini_ ## args - -#define __step_first(args) __step_ ## args -#define __step_next(prev, args) prev, __step_ ## args - -#define __str_s __g(ch) -#define __str_len __g(idx) -#define __temp_str(idx, ch, str) __str_s, __str_len, -#define __init_str(idx, ch, str) __str_s = (str), __str_len = length(__str_s), idx = 1 -#define __test_str(idx, ch, str) idx <= __str_len -#define __prep_str(idx, ch, str) ch = substr(__str_s, idx, 1) -#define __fini_str(idx, ch, str) 1 -#define __step_str(idx, ch, str) idx++ - -#define __temp_range(idx, from, to) -#define __init_range(idx, from, to) idx = (from) -#define __test_range(idx, from, to) idx <= (to) -#define __prep_range(idx, from, to) 1 -#define __fini_range(idx, from, to) 1 -#define __step_range(idx, from, to) idx++ - -#define __temp_range_step(idx, from, to, step) -#define __init_range_step(idx, from, to, step) idx = (from) -#define __test_range_step(idx, from, to, step) idx <= (to) -#define __prep_range_step(idx, from, to, step) 1 -#define __fini_range_step(idx, from, to, step) 1 -#define __step_range_step(idx, from, to, step) idx += (step) - -#define __temp_from(idx, from) -#define __init_from(idx, from) idx = (from) -#define __test_from(idx, from) 1 -#define __prep_from(idx, from) 1 -#define __fini_from(idx, from) 1 -#define __step_from(idx, from) idx++ - -#define __temp_from_step(idx, from, step) -#define __init_from_step(idx, from, step) idx = (from) -#define __test_from_step(idx, from, step) 1 -#define __prep_from_step(idx, from, step) 1 -#define __fini_from_step(idx, from, step) 1 -#define __step_from_step(idx, from, step) idx += (step) - -#define __temp_first_then(var, first, then) -#define __init_first_then(var, first, then) (var = (first)) -#define __test_first_then(var, first, then) 1 -#define __prep_first_then(var, first, then) 1 -#define __fini_first_then(var, first, then) 1 -#define __step_first_then(var, first, then) (var = (then)) - -#define for_var(var, expr) first_then(var, expr, expr) - -#define __temp_list(iter, var, list) -#define __init_list(iter, var, list) iter = (list) -#define __test_list(iter, var, list) !__endp(iter) -#define __prep_list(iter, var, list) var = __car(iter) -#define __fini_list(iter, var, list) 0 -#define __step_list(iter, var, list) iter = __cdr(iter) -#define __temp___list(iter, var, list) -#define __init___list(iter, var, list) iter = (list) -#define __test___list(iter, var, list) !__endp(iter) -#define __prep___list(iter, var, list) var = __car(iter) -#define __fini___list(iter, var, list) 0 -#define __step___list(iter, var, list) iter = __cdr(iter) - -#define __temp_fields(var) __g(var), -#define __init_fields(var) __g(var) = 1 -#define __test_fields(var) __g(var) <= NF -#define __prep_fields(var) var = $ __g(var) -#define __fini_fields(var) 1 -#define __step_fields(var) __g(var)++ -#define __temp___fields(var) __g(var), -#define __init___fields(var) __g(var) = 1 -#define __test___fields(var) __g(var) <= NF -#define __prep___fields(var) var = $ __g(var) -#define __fini___fields(var) 1 -#define __step___fields(var) __g(var)++ - - -#define __temp_keys(key, array) __g(key), -#define __init_keys(key, array) __g(key) = __keys(array) -#define __test_keys(key, array) !__endp(__g(key)) -#define __prep_keys(key, array) key = __car(__g(key)) -#define __fini_keys(key, array) 1 -#define __step_keys(key, array) __g(key) = __cdr(__g(key)) -#define __temp___keys(key, array) __g(key), -#define __init___keys(key, array) __g(key) = __keys(array) -#define __test___keys(key, array) !__endp(__g(key)) -#define __prep___keys(key, array) key = __car(__g(key)) -#define __fini___keys(key, array) 1 -#define __step___keys(key, array) __g(key) = __cdr(__g(key)) - -#define __temp_collect(var, expr) -#define __init_collect(var, expr) var = __list_begin() -#define __test_collect(var, expr) 1 -#define __prep_collect(var, expr) var = __list_add(var, expr) -#define __fini_collect(var, expr) var = __list_end(var) -#define __step_collect(var, expr) 1 - -#define __temp_collect_plus(var, expr) -#define __init_collect_plus(var, expr) var = __list_begin() -#define __test_collect_plus(var, expr) 1 -#define __prep_collect_plus(var, expr) var = __list_add(var, expr) -#define __fini_collect_plus(var, expr) var = __list_end(__list_add(var, expr)) -#define __step_collect_plus(var, expr) 1 - -#define __temp_summing(var, expr) -#define __init_summing(var, expr) var = 0 -#define __test_summing(var, expr) 1 -#define __prep_summing(var, expr) var += (expr) -#define __fini_summing(var, expr) 1 -#define __step_summing(var, expr) 1 - -function __loop_max(a, b) -{ - return a > b ? a : b -} - -#define __temp_maximizing(var, expr) -#define __init_maximizing(var, expr) var = nil -#define __test_maximizing(var, expr) 1 -#define __prep_maximizing(var, expr) var = (__null(var) \ - ? expr \ - : __loop_max(var, expr)) -#define __fini_maximizing(var, expr) 1 -#define __step_maximizing(var, expr) 1 - -function __loop_min(a, b) -{ - return a > b ? b : a -} - -#define __temp_minimizing(var, expr) -#define __init_minimizing(var, expr) var = nil -#define __test_minimizing(var, expr) 1 -#define __prep_minimizing(var, expr) var = (__null(var) \ - ? expr \ - : __loop_min(var, expr)) -#define __fini_minimizing(var, expr) 1 -#define __step_minimizing(var, expr) 1 - -function __loop_argmax(a, arga, b, argb) -{ - return a > b ? arga : argb; -} - -#define __ami(v) __gx(v, _max) -#define __amx(v) __gx(v, _min) -#define __amo(v) __gx(v, _old) - -#define __temp_argmax(am, arg, expr) __amx(am), __amo(am), -#define __init_argmax(am, arg, expr) (__amx(am) = __nil) || (am = __nil) -#define __test_argmax(am, arg, expr) 1 -#define __prep_argmax(am, arg, expr) ((__amo(am) = __amx(am)) || 1) && \ - ((__amx(am) = \ - (__null(__amx(am)) \ - ? expr \ - : __loop_max(__amx(am), \ - expr))) || 1) && \ - ((__amo(am) != __amx(am)) ? am = arg : 1) -#define __fini_argmax(am, arg, expr) 1 -#define __step_argmax(am, arg, expr) 1 - -function __loop_argmin(a, arga, b, argb) -{ - return a < b ? arga : argb; -} - -#define __temp_argmin(am, arg, expr) __ami(am), __amo(am), -#define __init_argmin(am, arg, expr) (__ami(am) = __nil) || (am = __nil) -#define __test_argmin(am, arg, expr) 1 -#define __prep_argmin(am, arg, expr) ((__amo(am) = __ami(am)) || 1) && \ - ((__ami(am) = \ - (__null(__ami(am)) \ - ? expr \ - : __loop_min(__ami(am), \ - expr))) || 1) && \ - ((__amo(am) != __ami(am)) ? am = arg : 1) -#define __fini_argmin(am, arg, expr) 1 -#define __step_argmin(am, arg, expr) 1 - -#define __temp_counting(var, expr) -#define __init_counting(var, expr) var = 0 -#define __test_counting(var, expr) 1 -#define __prep_counting(var, expr) (expr) ? var++ : 1 -#define __fini_counting(var, expr) 1 -#define __step_counting(var, expr) 1 - -#define __temp_while(expr) -#define __init_while(expr) 1 -#define __test_while(expr) expr -#define __prep_while(expr) 1 -#define __fini_while(expr) 1 -#define __step_while(expr) 1 - -#define __temp_until(expr) -#define __init_until(expr) 1 -#define __test_until(expr) !(expr) -#define __prep_until(expr) 1 -#define __fini_until(expr) 1 -#define __step_until(expr) 1 - -#define __temp_parallel(...) -#define __init_parallel(...) __prog(__varexpand3(__init_first, __init_next, \ - __VA_ARGS__)) -#define __test_parallel(...) __nd(__varexpand3(__test_first, __test_next, \ - __VA_ARGS__)) -#define __prep_parallel(...) (__nd(__varexpand3(__prep_first, __prep_next, \ - __VA_ARGS__)) || 1) -#define __fini_parallel(...) (__nd(__varexpand3(__fini_first, __fini_next, \ - __VA_ARGS__)) && 0) -#define __step_parallel(...) __prog(__varexpand3(__step_first, __step_next, \ - __VA_ARGS__)) - -#define __temp_if(test, clause) -#define __init_if(test, clause) __init_ ## clause -#define __test_if(test, clause) !(test) || __test_ ## clause -#define __prep_if(test, clause) (test) && __prep_ ## clause -#define __fini_if(test, clause) __fini_ ## clause -#define __step_if(test, clause) (test) && __step_ ## clause - -#define __temp_records(file) __g(stream) -#define __init_records(file) __g(stream) = file -#define __test_records(file) (getline < __g(stream)) > 0 -#define __prep_records(file) 1 -#define __fini_records(file) __g(stream) != "-" ? close(__g(stream)) : 1 -#define __step_records(file) 1 - -#endif diff --git a/cppawk-include/narg-priv.h b/cppawk-include/narg-priv.h deleted file mode 100644 index bee5300..0000000 --- a/cppawk-include/narg-priv.h +++ /dev/null @@ -1,367 +0,0 @@ -// cppawk: C preprocessor wrapper around awk -// Copyright 2022 Kaz Kylheku <kaz@kylheku.com> -// -// BSD-2 License -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. - -#ifndef __CPPAWK_NARG_PRIV_H -#define __CPPAWK_NARG_PRIV_H - -#ifndef __CPPAWK_BASE_H -#include "base.h" -#endif - -#define __bad _[<"too many args"<] - -#define __narg_50(B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12, B13, \ - B14, B15, B16, N33, N32, N31, N30, N29, N28, N27, N26, N25, \ - N24, N23, N22, N21, N20, N19, N18, N17, N16, N15, N14, N13, \ - N12, N11, N10, N9, N8, N7, N6, N5, N4, N3, N2, N1, N, ...) N - -#define __xnarg_50(...) __narg_50(__VA_ARGS__) - -// The __bad entries create a 16 position red zone. We effectively have -// space for 48 arguments, but if there are 33-48 arguments, we do not -// return an integer count, but rather bad syntax. Beyond 48 arguments, __narg -// starts to misbehave: it starts reproducing its 49th argument as its -// expansion. Without the 16 position bad syntax red zone, there would be -// and abrupt change: the macro would be good up to 32 arguments, returning the -// 1-32 ragument count, but the 33rd argument were added, the macro would -// misbehave badly, returning the 33rd argument, causnig a potentially -// hard-to-find bug. -#define __narg(...) __xnarg_50(__dummy, ## __VA_ARGS__, __bad, __bad, __bad, \ - __bad, __bad, __bad, __bad, __bad, __bad, \ - __bad, __bad, __bad, __bad, __bad, __bad, \ - __bad, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, \ - 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, \ - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) - -#define __repn_1(mac1, mac2, a1) \ - mac1(a1) -#define __repn_2(mac1, mac2, a1, a2) \ - mac2(mac1(a1), a2) -#define __repn_3(mac1, mac2, a1, a2, a3) \ - mac2(mac2(mac1(a1), a2), a3) -#define __repn_4(mac1, mac2, a1, a2, a3, a4) \ - mac2(mac2(mac2(mac1(a1), a2), a3), a4) -#define __repn_5(mac1, mac2, a1, a2, a3, a4, a5) \ - mac2(mac2(mac2(mac2(mac1(a1), a2), a3), a4), a5) -#define __repn_6(mac1, mac2, a1, a2, a3, a4, a5, a6) \ - mac2(mac2(mac2(mac2(mac2(mac1(a1), a2), a3), a4), a5), a6) -#define __repn_7(mac1, mac2, a1, a2, a3, a4, a5, a6, a7) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1), a2), a3), a4), a5), a6), a7) -#define __repn_8(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1), a2), a3), a4), a5), a6), a7), a8) -#define __repn_9(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1), a2), a3), a4), a5), a6), a7), a8), a9) -#define __repn_10(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1), a2), a3), a4), a5), a6), a7), a8), a9), a10) -#define __repn_11(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1), a2), a3), a4), a5), a6), a7), a8), a9), a10), a11) -#define __repn_12(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1), a2), a3), a4), a5), a6), a7), a8), a9), a10), a11), a12) -#define __repn_13(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1), a2), a3), a4), a5), a6), a7), a8), a9), a10), a11), a12), a13) -#define __repn_14(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1), a2), a3), a4), a5), a6), a7), a8), a9), a10), a11), a12), a13), a14) -#define __repn_15(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1), a2), a3), a4), a5), a6), a7), a8), a9), a10), a11), a12), a13), a14), a15) -#define __repn_16(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1), a2), a3), a4), a5), a6), a7), a8), a9), a10), a11), a12), a13), a14), a15), a16) -#define __repn_17(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1), a2), a3), a4), a5), a6), a7), a8), a9), a10), a11), a12), a13), a14), a15), a16), a17) -#define __repn_18(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1), a2), a3), a4), a5), a6), a7), a8), a9), a10), a11), a12), a13), a14), a15), a16), a17), a18) -#define __repn_19(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1), a2), a3), a4), a5), a6), a7), a8), a9), a10), a11), a12), a13), a14), a15), a16), a17), a18), a19) -#define __repn_20(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1), a2), a3), a4), a5), a6), a7), a8), a9), a10), a11), a12), a13), a14), a15), a16), a17), a18), a19), a20) -#define __repn_21(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1), a2), a3), a4), a5), a6), a7), a8), a9), a10), a11), a12), a13), a14), a15), a16), a17), a18), a19), a20), a21) -#define __repn_22(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1), a2), a3), a4), a5), a6), a7), a8), a9), a10), a11), a12), a13), a14), a15), a16), a17), a18), a19), a20), a21), a22) -#define __repn_23(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1), a2), a3), a4), a5), a6), a7), a8), a9), a10), a11), a12), a13), a14), a15), a16), a17), a18), a19), a20), a21), a22), a23) -#define __repn_24(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \ - a24) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1), a2), a3), a4), a5), a6), a7), a8), a9), a10), a11), a12), a13), a14), a15), a16), a17), a18), a19), a20), a21), a22), a23), a24) -#define __repn_25(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \ - a24, a25) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1), a2), a3), a4), a5), a6), a7), a8), a9), a10), a11), a12), a13), a14), a15), a16), a17), a18), a19), a20), a21), a22), a23), a24), a25) -#define __repn_26(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \ - a24, a25, a26) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1), a2), a3), a4), a5), a6), a7), a8), a9), a10), a11), a12), a13), a14), a15), a16), a17), a18), a19), a20), a21), a22), a23), a24), a25), a26) -#define __repn_27(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \ - a24, a25, a26, a27) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1), a2), a3), a4), a5), a6), a7), a8), a9), a10), a11), a12), a13), a14), a15), a16), a17), a18), a19), a20), a21), a22), a23), a24), a25), a26), a27) -#define __repn_28(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \ - a24, a25, a26, a27, a28) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1), a2), a3), a4), a5), a6), a7), a8), a9), a10), a11), a12), a13), a14), a15), a16), a17), a18), a19), a20), a21), a22), a23), a24), a25), a26), a27), a28) -#define __repn_29(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \ - a24, a25, a26, a27, a28, a29) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1), a2), a3), a4), a5), a6), a7), a8), a9), a10), a11), a12), a13), a14), a15), a16), a17), a18), a19), a20), a21), a22), a23), a24), a25), a26), a27), a28), a29) -#define __repn_30(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \ - a24, a25, a26, a27, a28, a29, a30) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1), a2), a3), a4), a5), a6), a7), a8), a9), a10), a11), a12), a13), a14), a15), a16), a17), a18), a19), a20), a21), a22), a23), a24), a25), a26), a27), a28), a29), a30) -#define __repn_31(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \ - a24, a25, a26, a27, a28, a29, a30, a31) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1), a2), a3), a4), a5), a6), a7), a8), a9), a10), a11), a12), a13), a14), a15), a16), a17), a18), a19), a20), a21), a22), a23), a24), a25), a26), a27), a28), a29), a30), a31) -#define __repn_32(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \ - a24, a25, a26, a27, a28, a29, a30, a31, a32) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1), a2), a3), a4), a5), a6), a7), a8), a9), a10), a11), a12), a13), a14), a15), a16), a17), a18), a19), a20), a21), a22), a23), a24), a25), a26), a27), a28), a29), a30), a31), a32) - -#define __repi_1(mac1, mac2, a1) \ - mac1(a1, 1) -#define __repi_2(mac1, mac2, a1, a2) \ - mac2(mac1(a1, 1), a2, 2) -#define __repi_3(mac1, mac2, a1, a2, a3) \ - mac2(mac2(mac1(a1, 1), a2, 2), a3, 3) -#define __repi_4(mac1, mac2, a1, a2, a3, a4) \ - mac2(mac2(mac2(mac1(a1, 1), a2, 2), a3, 3), a4, 4) -#define __repi_5(mac1, mac2, a1, a2, a3, a4, a5) \ - mac2(mac2(mac2(mac2(mac1(a1, 1), a2, 2), a3, 3), a4, 4), a5, 5) -#define __repi_6(mac1, mac2, a1, a2, a3, a4, a5, a6) \ - mac2(mac2(mac2(mac2(mac2(mac1(a1, 1), a2, 2), a3, 3), a4, 4), a5, 5), a6, 6) -#define __repi_7(mac1, mac2, a1, a2, a3, a4, a5, a6, a7) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1), a2, 2), a3, 3), a4, 4), a5, 5), a6, 6), a7, 7) -#define __repi_8(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1), a2, 2), a3, 3), a4, 4), a5, 5), a6, 6), a7, 7), a8, 8) -#define __repi_9(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1), a2, 2), a3, 3), a4, 4), a5, 5), a6, 6), a7, 7), a8, 8), a9, 9) -#define __repi_10(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1), a2, 2), a3, 3), a4, 4), a5, 5), a6, 6), a7, 7), a8, 8), a9, 9), a10, 10) -#define __repi_11(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1), a2, 2), a3, 3), a4, 4), a5, 5), a6, 6), a7, 7), a8, 8), a9, 9), a10, 10), a11, 11) -#define __repi_12(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1), a2, 2), a3, 3), a4, 4), a5, 5), a6, 6), a7, 7), a8, 8), a9, 9), a10, 10), a11, 11), a12, 12) -#define __repi_13(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1), a2, 2), a3, 3), a4, 4), a5, 5), a6, 6), a7, 7), a8, 8), a9, 9), a10, 10), a11, 11), a12, 12), a13, 13) -#define __repi_14(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1), a2, 2), a3, 3), a4, 4), a5, 5), a6, 6), a7, 7), a8, 8), a9, 9), a10, 10), a11, 11), a12, 12), a13, 13), a14, 14) -#define __repi_15(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1), a2, 2), a3, 3), a4, 4), a5, 5), a6, 6), a7, 7), a8, 8), a9, 9), a10, 10), a11, 11), a12, 12), a13, 13), a14, 14), a15, 15) -#define __repi_16(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1), a2, 2), a3, 3), a4, 4), a5, 5), a6, 6), a7, 7), a8, 8), a9, 9), a10, 10), a11, 11), a12, 12), a13, 13), a14, 14), a15, 15), a16, 16) -#define __repi_17(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1), a2, 2), a3, 3), a4, 4), a5, 5), a6, 6), a7, 7), a8, 8), a9, 9), a10, 10), a11, 11), a12, 12), a13, 13), a14, 14), a15, 15), a16, 16), a17, 17) -#define __repi_18(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1), a2, 2), a3, 3), a4, 4), a5, 5), a6, 6), a7, 7), a8, 8), a9, 9), a10, 10), a11, 11), a12, 12), a13, 13), a14, 14), a15, 15), a16, 16), a17, 17), a18, 18) -#define __repi_19(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1), a2, 2), a3, 3), a4, 4), a5, 5), a6, 6), a7, 7), a8, 8), a9, 9), a10, 10), a11, 11), a12, 12), a13, 13), a14, 14), a15, 15), a16, 16), a17, 17), a18, 18), a19, 19) -#define __repi_20(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1), a2, 2), a3, 3), a4, 4), a5, 5), a6, 6), a7, 7), a8, 8), a9, 9), a10, 10), a11, 11), a12, 12), a13, 13), a14, 14), a15, 15), a16, 16), a17, 17), a18, 18), a19, 19), a20, 20) -#define __repi_21(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1), a2, 2), a3, 3), a4, 4), a5, 5), a6, 6), a7, 7), a8, 8), a9, 9), a10, 10), a11, 11), a12, 12), a13, 13), a14, 14), a15, 15), a16, 16), a17, 17), a18, 18), a19, 19), a20, 20), a21, 21) -#define __repi_22(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1), a2, 2), a3, 3), a4, 4), a5, 5), a6, 6), a7, 7), a8, 8), a9, 9), a10, 10), a11, 11), a12, 12), a13, 13), a14, 14), a15, 15), a16, 16), a17, 17), a18, 18), a19, 19), a20, 20), a21, 21), a22, 22) -#define __repi_23(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1), a2, 2), a3, 3), a4, 4), a5, 5), a6, 6), a7, 7), a8, 8), a9, 9), a10, 10), a11, 11), a12, 12), a13, 13), a14, 14), a15, 15), a16, 16), a17, 17), a18, 18), a19, 19), a20, 20), a21, 21), a22, 22), a23, 23) -#define __repi_24(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \ - a24) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1), a2, 2), a3, 3), a4, 4), a5, 5), a6, 6), a7, 7), a8, 8), a9, 9), a10, 10), a11, 11), a12, 12), a13, 13), a14, 14), a15, 15), a16, 16), a17, 17), a18, 18), a19, 19), a20, 20), a21, 21), a22, 22), a23, 23), a24, 24) -#define __repi_25(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \ - a24, a25) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1), a2, 2), a3, 3), a4, 4), a5, 5), a6, 6), a7, 7), a8, 8), a9, 9), a10, 10), a11, 11), a12, 12), a13, 13), a14, 14), a15, 15), a16, 16), a17, 17), a18, 18), a19, 19), a20, 20), a21, 21), a22, 22), a23, 23), a24, 24), a25, 25) -#define __repi_26(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \ - a24, a25, a26) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1), a2, 2), a3, 3), a4, 4), a5, 5), a6, 6), a7, 7), a8, 8), a9, 9), a10, 10), a11, 11), a12, 12), a13, 13), a14, 14), a15, 15), a16, 16), a17, 17), a18, 18), a19, 19), a20, 20), a21, 21), a22, 22), a23, 23), a24, 24), a25, 25), a26, 26) -#define __repi_27(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \ - a24, a25, a26, a27) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1), a2, 2), a3, 3), a4, 4), a5, 5), a6, 6), a7, 7), a8, 8), a9, 9), a10, 10), a11, 11), a12, 12), a13, 13), a14, 14), a15, 15), a16, 16), a17, 17), a18, 18), a19, 19), a20, 20), a21, 21), a22, 22), a23, 23), a24, 24), a25, 25), a26, 26), a27, 27) -#define __repi_28(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \ - a24, a25, a26, a27, a28) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1), a2, 2), a3, 3), a4, 4), a5, 5), a6, 6), a7, 7), a8, 8), a9, 9), a10, 10), a11, 11), a12, 12), a13, 13), a14, 14), a15, 15), a16, 16), a17, 17), a18, 18), a19, 19), a20, 20), a21, 21), a22, 22), a23, 23), a24, 24), a25, 25), a26, 26), a27, 27), a28, 28) -#define __repi_29(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \ - a24, a25, a26, a27, a28, a29) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1), a2, 2), a3, 3), a4, 4), a5, 5), a6, 6), a7, 7), a8, 8), a9, 9), a10, 10), a11, 11), a12, 12), a13, 13), a14, 14), a15, 15), a16, 16), a17, 17), a18, 18), a19, 19), a20, 20), a21, 21), a22, 22), a23, 23), a24, 24), a25, 25), a26, 26), a27, 27), a28, 28), a29, 29) -#define __repi_30(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \ - a24, a25, a26, a27, a28, a29, a30) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1), a2, 2), a3, 3), a4, 4), a5, 5), a6, 6), a7, 7), a8, 8), a9, 9), a10, 10), a11, 11), a12, 12), a13, 13), a14, 14), a15, 15), a16, 16), a17, 17), a18, 18), a19, 19), a20, 20), a21, 21), a22, 22), a23, 23), a24, 24), a25, 25), a26, 26), a27, 27), a28, 28), a29, 29), a30, 30) -#define __repi_31(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \ - a24, a25, a26, a27, a28, a29, a30, a31) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1), a2, 2), a3, 3), a4, 4), a5, 5), a6, 6), a7, 7), a8, 8), a9, 9), a10, 10), a11, 11), a12, 12), a13, 13), a14, 14), a15, 15), a16, 16), a17, 17), a18, 18), a19, 19), a20, 20), a21, 21), a22, 22), a23, 23), a24, 24), a25, 25), a26, 26), a27, 27), a28, 28), a29, 29), a30, 30), a31, 31) -#define __repi_32(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \ - a24, a25, a26, a27, a28, a29, a30, a31, a32) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1), a2, 2), a3, 3), a4, 4), a5, 5), a6, 6), a7, 7), a8, 8), a9, 9), a10, 10), a11, 11), a12, 12), a13, 13), a14, 14), a15, 15), a16, 16), a17, 17), a18, 18), a19, 19), a20, 20), a21, 21), a22, 22), a23, 23), a24, 24), a25, 25), a26, 26), a27, 27), a28, 28), a29, 29), a30, 30), a31, 31), a32, 32) - -#define __repia_1(mac1, mac2, a, a1) \ - mac1(a1, 1, a) -#define __repia_2(mac1, mac2, a, a1, a2) \ - mac2(mac1(a1, 1, a), a2, 2, a) -#define __repia_3(mac1, mac2, a, a1, a2, a3) \ - mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a) -#define __repia_4(mac1, mac2, a, a1, a2, a3, a4) \ - mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a) -#define __repia_5(mac1, mac2, a, a1, a2, a3, a4, a5) \ - mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a) -#define __repia_6(mac1, mac2, a, a1, a2, a3, a4, a5, a6) \ - mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a) -#define __repia_7(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a) -#define __repia_8(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a) -#define __repia_9(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a) -#define __repia_10(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a) -#define __repia_11(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a) -#define __repia_12(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a) -#define __repia_13(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a) -#define __repia_14(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a) -#define __repia_15(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a) -#define __repia_16(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a) -#define __repia_17(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a) -#define __repia_18(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a), a18, 18, a) -#define __repia_19(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a), a18, 18, a), a19, 19, a) -#define __repia_20(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a), a18, 18, a), a19, 19, a), a20, 20, a) -#define __repia_21(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a), a18, 18, a), a19, 19, a), a20, 20, a), a21, 21, a) -#define __repia_22(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a), a18, 18, a), a19, 19, a), a20, 20, a), a21, 21, a), a22, 22, a) -#define __repia_23(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a), a18, 18, a), a19, 19, a), a20, 20, a), a21, 21, a), a22, 22, a), a23, 23, a) -#define __repia_24(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \ - a24) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a), a18, 18, a), a19, 19, a), a20, 20, a), a21, 21, a), a22, 22, a), a23, 23, a), a24, 24, a) -#define __repia_25(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \ - a24, a25) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a), a18, 18, a), a19, 19, a), a20, 20, a), a21, 21, a), a22, 22, a), a23, 23, a), a24, 24, a), a25, 25, a) -#define __repia_26(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \ - a24, a25, a26) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a), a18, 18, a), a19, 19, a), a20, 20, a), a21, 21, a), a22, 22, a), a23, 23, a), a24, 24, a), a25, 25, a), a26, 26, a) -#define __repia_27(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \ - a24, a25, a26, a27) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a), a18, 18, a), a19, 19, a), a20, 20, a), a21, 21, a), a22, 22, a), a23, 23, a), a24, 24, a), a25, 25, a), a26, 26, a), a27, 27, a) -#define __repia_28(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \ - a24, a25, a26, a27, a28) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a), a18, 18, a), a19, 19, a), a20, 20, a), a21, 21, a), a22, 22, a), a23, 23, a), a24, 24, a), a25, 25, a), a26, 26, a), a27, 27, a), a28, 28, a) -#define __repia_29(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \ - a24, a25, a26, a27, a28, a29) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a), a18, 18, a), a19, 19, a), a20, 20, a), a21, 21, a), a22, 22, a), a23, 23, a), a24, 24, a), a25, 25, a), a26, 26, a), a27, 27, a), a28, 28, a), a29, 29, a) -#define __repia_30(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \ - a24, a25, a26, a27, a28, a29, a30) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a), a18, 18, a), a19, 19, a), a20, 20, a), a21, 21, a), a22, 22, a), a23, 23, a), a24, 24, a), a25, 25, a), a26, 26, a), a27, 27, a), a28, 28, a), a29, 29, a), a30, 30, a) -#define __repia_31(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \ - a24, a25, a26, a27, a28, a29, a30, a31) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a), a18, 18, a), a19, 19, a), a20, 20, a), a21, 21, a), a22, 22, a), a23, 23, a), a24, 24, a), a25, 25, a), a26, 26, a), a27, 27, a), a28, 28, a), a29, 29, a), a30, 30, a), a31, 31, a) -#define __repia_32(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \ - a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \ - a24, a25, a26, a27, a28, a29, a30, a31, a32) \ - mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a), a18, 18, a), a19, 19, a), a20, 20, a), a21, 21, a), a22, 22, a), a23, 23, a), a24, 24, a), a25, 25, a), a26, 26, a), a27, 27, a), a28, 28, a), a29, 29, a), a30, 30, a), a31, 31, a), a32, 32, a) - -#define __varexpand(mac1, mac2, ...) \ - __xcat(__repn_, __narg(__VA_ARGS__)) (mac1, mac2, __VA_ARGS__) - -#define __varexpand2(mac1, mac2, ...) \ - __xcat(__repn_, __narg(__VA_ARGS__)) (mac1, mac2, __VA_ARGS__) - -#define __varexpand3(mac1, mac2, ...) \ - __xcat(__repn_, __narg(__VA_ARGS__)) (mac1, mac2, __VA_ARGS__) - -#define __rev_first(arg) arg -#define __rev_next(args, arg) arg, args -#define __revarg(...) __varexpand(__rev_first, __rev_next, __VA_ARGS__) - -#define __va_args(...) __VA_ARGS__ -#define __splice(args) __va_args args - -#define __variexpand(mac1, mac2, ...) \ - __xcat(__repi_, __narg(__VA_ARGS__)) (mac1, mac2, __VA_ARGS__) - -#define __variaexpand(mac1, mac2, a, ...) \ - __xcat(__repia_, __narg(__VA_ARGS__)) (mac1, mac2, a, __VA_ARGS__) - -#endif diff --git a/cppawk-include/narg.h b/cppawk-include/narg.h deleted file mode 100644 index b757f41..0000000 --- a/cppawk-include/narg.h +++ /dev/null @@ -1,44 +0,0 @@ -// cppawk: C preprocessor wrapper around awk -// Copyright 2022 Kaz Kylheku <kaz@kylheku.com> -// -// BSD-2 License -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. - -#ifndef CPPAWK_NARG_H -#define CPPAWK_NARG_H - -#ifndef __CPPAWK_NARG_PRIV_H -#include "narg-priv.h" -#endif - -#define narg(...) __narg(__VA_ARGS__) -#define varexpand(first, rest, ...) __varexpand(first, rest, __VA_ARGS__) -#define variexpand(first, rest, ...) __variexpand(first, rest, __VA_ARGS__) -#define variaexpand(first, rest, \ - arg, ...) __variaexpand(first, rest, arg, \ - __VA_ARGS__) -#define revarg(...) __revarg(__VA_ARGS__) -#define splice(args) __splice(args) - -#endif diff --git a/cppawk-include/varg-priv.h b/cppawk-include/varg-priv.h deleted file mode 100644 index d71b500..0000000 --- a/cppawk-include/varg-priv.h +++ /dev/null @@ -1,392 +0,0 @@ -// cppawk: C preprocessor wrapper around awk -// Copyright 2022 Kaz Kylheku <kaz@kylheku.com> -// -// BSD-2 License -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. - -#ifndef __CPPAWK_VARG_PRIV_H -#define __CPPAWK_VARG_PRIV_H - -#ifndef __CPPAWK_BASE_H -#include "base.h" -#endif - -#ifndef __CPPAWK_CASE_PRIV_H -#include "case-priv.h" -#endif - -#define __rest \ - __r1, __r2, __r3, __r4, __r5, __r6, __r7, __r8, __r9, __r10, __r11, \ - __r12, __r13, __r14, __r15, __r16, __r17, __r18, __r19, __r20, __r21, \ - __r22, __r23, __r24, __r25, __r26, __r27, __r28, __r29, __r30, __r31, __r32 - -#define __varg_count(name, check, count) \ - if (__present(check)) \ - __error(name ": too many arguments"); \ - count = 0; \ - if (__present(__r16)) { \ - if (__present(__r24)) { \ - if (__present(__r28)) { \ - if (__present(__r30)) { \ - if (__present(__r31)) { \ - if (__present(__r32)) \ - count = 32; \ - else \ - count = 31; \ - } else { \ - count = 30; \ - } \ - } else { /* !__present(__r30) */ \ - if (__present(__r29)) \ - count = 29; \ - else \ - count = 28; \ - } \ - } else { /* !__present(__r28) */ \ - if (__present(__r26)) { \ - if (__present(__r27)) \ - count = 27; \ - else \ - count = 26; \ - } else { /* !__present(__r26) */ \ - if (__present(__r25)) \ - count = 25; \ - else \ - count = 24; \ - } \ - } \ - } else { /* !__present(__r24) */ \ - if (__present(__r20)) { \ - if (__present(__r22)) { \ - if (__present(__r23)) \ - count = 23; \ - else \ - count = 22; \ - } else { /* !__present(__r22) */ \ - if (__present(__r21)) \ - count = 21; \ - else \ - count = 20; \ - } \ - } else { /* !__present(__r20) */ \ - if (__present(__r18)) { \ - if (__present(__r19)) \ - count = 19; \ - else \ - count = 18; \ - } else { /* !__present(__r18) */ \ - if (__present(__r17)) \ - count = 17; \ - else \ - count = 16; \ - } \ - } \ - } \ - } else { /*!__present(__r16) */ \ - if (__present(__r8)) { \ - if (__present(__r12)) { \ - if (__present(__r14)) { \ - if (__present(__r15)) { \ - count = 15; \ - } else { \ - count = 14; \ - } \ - } else { /* !__present(__r14) */ \ - if (__present(__r13)) \ - count = 13; \ - else \ - count = 12; \ - } \ - } else { /* !__present(__r12) */ \ - if (__present(__r10)) { \ - if (__present(__r11)) \ - count = 11; \ - else \ - count = 10; \ - } else { /* !__present(__r10) */ \ - if (__present(__r9)) \ - count = 9; \ - else \ - count = 8; \ - } \ - } \ - } else { /* !__present(__r8) */ \ - if (__present(__r4)) { \ - if (__present(__r6)) { \ - if (__present(__r7)) \ - count = 7; \ - else \ - count = 6; \ - } else { /* !__present(__r6) */ \ - if (__present(__r5)) \ - count = 5; \ - else \ - count = 4; \ - } \ - } else { /* !__present(__r4) */ \ - if (__present(__r2)) { \ - if (__present(__r3)) \ - count = 3; \ - else \ - count = 2; \ - } else { /* !__present(__r2) */ \ - if (__present(__r1)) \ - count = 1; \ - } \ - } \ - } \ - } - -#define __varg_list(name, check, count, out) \ - __varg_count(name, check, count); \ - out = __nil; \ - __case (count) { \ - __of (32) \ - out = __cons(__r32, out); \ - __cfall; \ - __of (31) \ - out = __cons(__r31, out); \ - __cfall; \ - __of (30) \ - out = __cons(__r30, out); \ - __cfall; \ - __of (29) \ - out = __cons(__r29, out); \ - __cfall; \ - __of (28) \ - out = __cons(__r28, out); \ - __cfall; \ - __of (27) \ - out = __cons(__r27, out); \ - __cfall; \ - __of (26) \ - out = __cons(__r26, out); \ - __cfall; \ - __of (25) \ - out = __cons(__r25, out); \ - __cfall; \ - __of (24) \ - out = __cons(__r24, out); \ - __cfall; \ - __of (23) \ - out = __cons(__r23, out); \ - __cfall; \ - __of (22) \ - out = __cons(__r22, out); \ - __cfall; \ - __of (21) \ - out = __cons(__r21, out); \ - __cfall; \ - __of (20) \ - out = __cons(__r20, out); \ - __cfall; \ - __of (19) \ - out = __cons(__r19, out); \ - __cfall; \ - __of (18) \ - out = __cons(__r18, out); \ - __cfall; \ - __of (17) \ - out = __cons(__r17, out); \ - __cfall; \ - __of (16) \ - out = __cons(__r16, out); \ - __cfall; \ - __of (15) \ - out = __cons(__r15, out); \ - __cfall; \ - __of (14) \ - out = __cons(__r14, out); \ - __cfall; \ - __of (13) \ - out = __cons(__r13, out); \ - __cfall; \ - __of (12) \ - out = __cons(__r12, out); \ - __cfall; \ - __of (11) \ - out = __cons(__r11, out); \ - __cfall; \ - __of (10) \ - out = __cons(__r10, out); \ - __cfall; \ - __of (9) \ - out = __cons(__r9, out); \ - __cfall; \ - __of (8) \ - out = __cons(__r8, out); \ - __cfall; \ - __of (7) \ - out = __cons(__r7, out); \ - __cfall; \ - __of (6) \ - out = __cons(__r6, out); \ - __cfall; \ - __of (5) \ - out = __cons(__r5, out); \ - __cfall; \ - __of (4) \ - out = __cons(__r4, out); \ - __cfall; \ - __of (3) \ - out = __cons(__r3, out); \ - __cfall; \ - __of (2) \ - out = __cons(__r2, out); \ - __cfall; \ - __of (1) \ - out = __cons(__r1, out); \ - __cfall; \ - } - -#define __varg_array(name, check, count, out) \ - __varg_count(name, check, count); \ - delete out; \ - __case (count) { \ - __of (32) \ - out[32] = __r32; \ - __cfall; \ - __of (31) \ - out[31] = __r31; \ - __cfall; \ - __of (30) \ - out[30] = __r30; \ - __cfall; \ - __of (29) \ - out[29] = __r29; \ - __cfall; \ - __of (28) \ - out[28] = __r28; \ - __cfall; \ - __of (27) \ - out[27] = __r27; \ - __cfall; \ - __of (26) \ - out[26] = __r26; \ - __cfall; \ - __of (25) \ - out[25] = __r25; \ - __cfall; \ - __of (24) \ - out[24] = __r24; \ - __cfall; \ - __of (23) \ - out[23] = __r23; \ - __cfall; \ - __of (22) \ - out[22] = __r22; \ - __cfall; \ - __of (21) \ - out[21] = __r21; \ - __cfall; \ - __of (20) \ - out[20] = __r20; \ - __cfall; \ - __of (19) \ - out[19] = __r19; \ - __cfall; \ - __of (18) \ - out[18] = __r18; \ - __cfall; \ - __of (17) \ - out[17] = __r17; \ - __cfall; \ - __of (16) \ - out[16] = __r16; \ - __cfall; \ - __of (15) \ - out[15] = __r15; \ - __cfall; \ - __of (14) \ - out[14] = __r14; \ - __cfall; \ - __of (13) \ - out[13] = __r13; \ - __cfall; \ - __of (12) \ - out[12] = __r12; \ - __cfall; \ - __of (11) \ - out[11] = __r11; \ - __cfall; \ - __of (10) \ - out[10] = __r10; \ - __cfall; \ - __of (9) \ - out[9] = __r9; \ - __cfall; \ - __of (8) \ - out[8] = __r8; \ - __cfall; \ - __of (7) \ - out[7] = __r7; \ - __cfall; \ - __of (6) \ - out[6] = __r6; \ - __cfall; \ - __of (5) \ - out[5] = __r5; \ - __cfall; \ - __of (4) \ - out[4] = __r4; \ - __cfall; \ - __of (3) \ - out[3] = __r3; \ - __cfall; \ - __of (2) \ - out[2] = __r2; \ - __cfall; \ - __of (1) \ - out[1] = __r1; \ - __cfall; \ - } - -#ifndef __CPPAWK_CONS_PRIV_H -#include "cons-priv.h" -#endif - -function __argcount(__name, __rest, - __narg, // check argument; doubles as local count - __case_temps) -{ - __varg_count(__name, __narg, __narg) - return __narg; -} - -function __arglist(__name, __rest, - __narg, // check argument; doubles as local count - __out, __case_temps) -{ - __varg_list(__name, __narg, __narg, __out) - return __out; -} - -function __argarray(__name, __to_array, __rest, - __narg, // check argument; doubles as local count - __case_temps) -{ - __varg_array(__name, __narg, __narg, __to_array) -} - -#endif diff --git a/cppawk-include/varg.h b/cppawk-include/varg.h deleted file mode 100644 index c0ff036..0000000 --- a/cppawk-include/varg.h +++ /dev/null @@ -1,46 +0,0 @@ -// cppawk: C preprocessor wrapper around awk -// Copyright 2022 Kaz Kylheku <kaz@kylheku.com> -// -// BSD-2 License -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. - -#ifndef __CPPAWK_VARG_H -#define __CPPAWK_VARG_H - -#ifndef __CPPAWK_BASE_H -#include "base.h" -#endif - -#ifndef __CPPAWK_VARG_PRIV_H -#include "varg-priv.h" -#endif - -#define restargs __rest -#define arg(n) __r ## n -#define present(arg) __present(arg) -#define argcount __argcount -#define arglist __arglist -#define argarray __argarray - -#endif |