diff options
Diffstat (limited to 'perl/.svn/text-base/NASTD.xs.svn-base')
-rw-r--r-- | perl/.svn/text-base/NASTD.xs.svn-base | 278 |
1 files changed, 278 insertions, 0 deletions
diff --git a/perl/.svn/text-base/NASTD.xs.svn-base b/perl/.svn/text-base/NASTD.xs.svn-base new file mode 100644 index 0000000..e7b1179 --- /dev/null +++ b/perl/.svn/text-base/NASTD.xs.svn-base @@ -0,0 +1,278 @@ +/* $Id: NASTD.xs,v 1.5 2001/10/29 11:18:20 shmit Exp $ */ + +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" + +#include "../include/nastd.h" + +#include "include/nastdxs.def" + +static int +not_here(char *s) +{ + croak("%s not implemented on this architecture", s); + return -1; +} + +static double +constant(char *name, int arg) +{ + errno = 0; + switch (*name) { + case 'A': + if (strEQ(name, "NAST_OK")) + return NAST_OK; + else if (strEQ(name, "NAST_SERVER_GONE")) + return NAST_SERVER_GONE; + else if (strEQ(name, "NAST_NOMEM")) + return NAST_NOMEM; + else if (strEQ(name, "NAST_UNNKNOWN_RESPONSE")) + return NAST_UNKNOWN_RESPONSE; + else if (strEQ(name, "NAST_TIMEDOUT")) + return NAST_TIMEDOUT; + else if (strEQ(name, "NAST_UNKNOWN_OPT")) + return NAST_UNKNOWN_OPT; + else if (strEQ(name, "NAST_SERVER_ERR")) + return NAST_SERVER_ERR; + break; + case 'B': + break; + case 'C': + break; + case 'D': + break; + case 'E': + break; + case 'F': + break; + case 'G': + break; + case 'H': + break; + case 'I': + break; + case 'J': + break; + case 'K': + break; + case 'L': + break; + case 'M': + break; + case 'N': + break; + case 'O': + break; + case 'P': + break; + case 'Q': + break; + case 'R': + break; + case 'S': + break; + case 'T': + break; + case 'U': + break; + case 'V': + break; + case 'W': + break; + case 'X': + break; + case 'Y': + break; + case 'Z': + break; + } + errno = EINVAL; + return 0; + +not_there: + errno = ENOENT; + return 0; +} + + +MODULE = NASTD PACKAGE = NASTD + +PROTOTYPES: ENABLE + +double +constant(name,arg) + char * name + int arg + +nasth * +nast_sphincter_new(...) + PREINIT: + STRLEN n_a; + + CODE: + nasth *sphincter; + + if (items == 0) + sphincter = nast_sphincter_new(SvPV(ST(0), n_a)); + else + sphincter = nast_sphincter_new(NULL); + + if (sphincter == NULL) + XSRETURN_UNDEF; + + RETVAL = sphincter; + + OUTPUT: + RETVAL + +void +nast_sphincter_close(sphincter) + nasth *sphincter + +int +nast_options_get(sphincter) + nasth *sphincter + + PREINIT: + nast_options nast_opts; + + PPCODE: + if (nast_options_get(sphincter, &nast_opts) != -1) { + if (nast_opts.use_qcache == NASTFALSE) + XPUSHs(sv_2mortal(newSViv(0))); + else + XPUSHs(sv_2mortal(newSViv(1))); + if (nast_opts.use_localdb == NASTFALSE) + XPUSHs(sv_2mortal(newSViv(0))); + else + XPUSHs(sv_2mortal(newSViv(1))); + if (nast_opts.fallthrough_async == NASTFALSE) + XPUSHs(sv_2mortal(newSViv(0))); + else + XPUSHs(sv_2mortal(newSViv(1))); + if (nast_opts.always_fallthrough == NASTFALSE) + XPUSHs(sv_2mortal(newSViv(0))); + else + XPUSHs(sv_2mortal(newSViv(1))); + if (nast_opts.fail_once == NASTFALSE) + XPUSHs(sv_2mortal(newSViv(0))); + else + XPUSHs(sv_2mortal(newSViv(1))); + if (nast_opts.no_fallthrough == NASTFALSE) + XPUSHs(sv_2mortal(newSViv(0))); + else + XPUSHs(sv_2mortal(newSViv(1))); + } + +int +nast_options_set(sphincter, ...) + nasth *sphincter + + PREINIT: + nast_options nast_opts; + int i; + + CODE: + if (items == 8) { + if (SvTRUE(ST(1))) + nast_opts.use_qcache = NASTTRUE; + else + nast_opts.use_qcache = NASTFALSE; + if (SvTRUE(ST(2))) + nast_opts.use_localdb = NASTTRUE; + else + nast_opts.use_localdb = NASTFALSE; + if (SvTRUE(ST(3))) + nast_opts.fallthrough_async = NASTTRUE; + else + nast_opts.fallthrough_async = NASTFALSE; + if (SvTRUE(ST(4))) + nast_opts.always_fallthrough = NASTTRUE; + else + nast_opts.always_fallthrough = NASTFALSE; + if (SvTRUE(ST(5))) + nast_opts.fail_once = NASTTRUE; + else + nast_opts.fail_once = NASTFALSE; + if (SvTRUE(ST(6))) + nast_opts.no_fallthrough = NASTTRUE; + else + nast_opts.no_fallthrough = NASTFALSE; + + RETVAL = nast_options_set(sphincter, &nast_opts); + } else + RETVAL = -1; + + OUTPUT: + RETVAL + +SV * +nast_get_result(sphincter) + nasth *sphincter + + PREINIT: + nast_array *aa; + int i; + + PPCODE: + aa = nast_get_result(sphincter); + if (aa != NULL) { + EXTEND(SP, aa->nitems); + + for (i = 0; i < aa->nitems; i++) { + SV *item; + + item = newSVpv(aa->items[i]->strdata, + aa->items[i]->strlen); + PUSHs(sv_2mortal(item)); + } + nast_free_result(aa); + } + +int +interface_nast_qcmd(sphincter, key) + nasth *sphincter + const char *key +INTERFACE: + nast_add nast_del nast_get + +int +nast_upd(sphincter, key, ...) + nasth *sphincter + const char *key + + PREINIT: + nast_array *aa; + int i; + + CODE: + aa = nast_array_new(); + if (aa != NULL) { + for (i = 2; i < items; i++) { + char *str; + STRLEN len; + + str = (char *)SvPV(ST(i), len); + nast_array_add(aa, len, str); + } + RETVAL = nast_upd(sphincter, key, aa); + } else { + RETVAL = -1; + } + nast_array_delete(aa); + + OUTPUT: + RETVAL + +int +nast_geterr(sphincter) + nasth *sphincter + +char * +nast_errmsg(sphincter) + nasth *sphincter + +int +nast_stats(sphincter) + nasth *sphincter |