diff options
Diffstat (limited to 'Src/Modules')
-rw-r--r-- | Src/Modules/example.c | 39 | ||||
-rw-r--r-- | Src/Modules/example.mdd | 1 | ||||
-rw-r--r-- | Src/Modules/zftp.c | 3 |
3 files changed, 42 insertions, 1 deletions
diff --git a/Src/Modules/example.c b/Src/Modules/example.c index 95545172f..50b8c1626 100644 --- a/Src/Modules/example.c +++ b/Src/Modules/example.c @@ -30,22 +30,45 @@ #include "example.mdh" #include "example.pro" +/* parameters */ + +static long intparam; +static char *strparam; +static char **arrparam; + + /**/ static int bin_example(char *nam, char **args, char *ops, int func) { unsigned char c; + char **oargs = args, **p = arrparam; + long i = 0; printf("Options: "); for (c = 32; ++c < 128;) if (ops[c]) putchar(c); printf("\nArguments:"); - for (; *args; args++) { + for (; *args; i++, args++) { putchar(' '); fputs(*args, stdout); } printf("\nName: %s\n", nam); + printf("\nInteger Parameter: %ld\n", intparam); + printf("String Parameter: %s\n", strparam ? strparam : ""); + printf("Array Parameter:"); + if (p) + while (*p) printf(" %s", *p++); + printf("\n"); + + intparam = i; + zsfree(strparam); + strparam = ztrdup(*oargs ? *oargs : ""); + freearray(arrparam); + PERMALLOC { + arrparam = arrdup(oargs); + } LASTALLOC; return 0; } @@ -103,6 +126,12 @@ static struct conddef cotab[] = { CONDDEF("ex", CONDF_INFIX, cond_i_ex, 0, 0, 0), }; +static struct paramdef patab[] = { + INTPARAMDEF("exint", &intparam), + STRPARAMDEF("exstr", &strparam), + ARRPARAMDEF("exarr", &arrparam), +}; + static struct funcwrap wrapper[] = { WRAPDEF(ex_wrapper), }; @@ -120,8 +149,15 @@ setup_example(Module m) int boot_example(Module m) { + intparam = 42; + strparam = ztrdup("example"); + arrparam = (char **) zalloc(3 * sizeof(char *)); + arrparam[0] = ztrdup("example"); + arrparam[1] = ztrdup("array"); + arrparam[2] = NULL; return !(addbuiltins(m->nam, bintab, sizeof(bintab)/sizeof(*bintab)) | addconddefs(m->nam, cotab, sizeof(cotab)/sizeof(*cotab)) | + addparamdefs(m->nam, patab, sizeof(patab)/sizeof(*patab)) | !addwrapper(m, wrapper)); } @@ -133,6 +169,7 @@ cleanup_example(Module m) { deletebuiltins(m->nam, bintab, sizeof(bintab)/sizeof(*bintab)); deleteconddefs(m->nam, cotab, sizeof(cotab)/sizeof(*cotab)); + deleteparamdefs(m->nam, patab, sizeof(patab)/sizeof(*patab)); deletewrapper(m, wrapper); return 0; } diff --git a/Src/Modules/example.mdd b/Src/Modules/example.mdd index f2cd50693..5ed55e6f1 100644 --- a/Src/Modules/example.mdd +++ b/Src/Modules/example.mdd @@ -2,5 +2,6 @@ autobins="example" autoinfixconds="ex" autoprefixconds="len" +autoparams="exint exstr exarr" objects="example.o" diff --git a/Src/Modules/zftp.c b/Src/Modules/zftp.c index 126aa061e..651a5c952 100644 --- a/Src/Modules/zftp.c +++ b/Src/Modules/zftp.c @@ -71,6 +71,9 @@ #ifdef HAVE_POLL_H # include <poll.h> #endif +#if defined(HAVE_POLL) && !defined(POLLIN) && !defined(POLLNORM) +# undef HAVE_POLL +#endif /* pinch the definition from <netinet/in.h> for deficient headers */ #ifndef INADDR_NONE |