Module Name: othersrc
Committed By: agc
Date: Thu Jun 6 01:45:57 UTC 2013
Modified Files:
othersrc/external/historical/eawk/bin: Makefile expected
othersrc/external/historical/eawk/dist: run.c tran.c
othersrc/external/historical/eawk/extend: Makefile
othersrc/external/historical/eawk/extend/db: db.c
othersrc/external/historical/eawk/scripts: tart.sh
Added Files:
othersrc/external/historical/eawk/extend/curses: Makefile curses.c
shlib_version
othersrc/external/historical/eawk/extend/threshold: Makefile
shlib_version threshold.c
othersrc/external/historical/eawk/scripts: rain.sh test-thresh.sh
threshold.sh
Log Message:
Changes to eawk:
+ reworked the db interface to be easier to use - results are now
returned as part of key and value arrays, which both have data and
size fields, to mirror the DBT struct
+ added initial curses bindings
+ fixed a bug in numeric array field names which I introduced
+ added scripts/rain.sh awk script which does what /usr/games/rain
does, and which exercises numeric array field names, and curses. It's
also much smaller than the equivalent C source.
+ added bindings for threshold algorithms, and a script to exercise
them
To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 othersrc/external/historical/eawk/bin/Makefile \
othersrc/external/historical/eawk/bin/expected
cvs rdiff -u -r1.6 -r1.7 othersrc/external/historical/eawk/dist/run.c
cvs rdiff -u -r1.5 -r1.6 othersrc/external/historical/eawk/dist/tran.c
cvs rdiff -u -r1.3 -r1.4 othersrc/external/historical/eawk/extend/Makefile
cvs rdiff -u -r0 -r1.1 \
othersrc/external/historical/eawk/extend/curses/Makefile \
othersrc/external/historical/eawk/extend/curses/curses.c \
othersrc/external/historical/eawk/extend/curses/shlib_version
cvs rdiff -u -r1.1 -r1.2 othersrc/external/historical/eawk/extend/db/db.c
cvs rdiff -u -r0 -r1.1 \
othersrc/external/historical/eawk/extend/threshold/Makefile \
othersrc/external/historical/eawk/extend/threshold/shlib_version \
othersrc/external/historical/eawk/extend/threshold/threshold.c
cvs rdiff -u -r0 -r1.1 othersrc/external/historical/eawk/scripts/rain.sh \
othersrc/external/historical/eawk/scripts/test-thresh.sh \
othersrc/external/historical/eawk/scripts/threshold.sh
cvs rdiff -u -r1.1 -r1.2 othersrc/external/historical/eawk/scripts/tart.sh
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: othersrc/external/historical/eawk/bin/Makefile
diff -u othersrc/external/historical/eawk/bin/Makefile:1.3 othersrc/external/historical/eawk/bin/Makefile:1.4
--- othersrc/external/historical/eawk/bin/Makefile:1.3 Wed Jun 5 00:55:25 2013
+++ othersrc/external/historical/eawk/bin/Makefile Thu Jun 6 01:45:56 2013
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.3 2013/06/05 00:55:25 agc Exp $
+# $NetBSD: Makefile,v 1.4 2013/06/06 01:45:56 agc Exp $
.include <bsd.own.mk>
@@ -108,7 +108,7 @@ t test: ${PROG}
@echo "31. Testing hmac"
@env LD_LIBRARY_PATH=${LIBEAWKDIR}:${LIB_HMAC} ./${PROG} 'BEGIN { use("hmac"); mac = hmac("sha1", "akey", "the quick brown fox jumps over the lazy dog"); print hmac_bin2str(mac) }'
@echo "32. Testing db"
- @env LD_LIBRARY_PATH=${LIBEAWKDIR}:${LIB_DB} ./${PROG} 'BEGIN { use("db"); db = dbopen("/etc/pwd.db", O_RDONLY, 0666, "hash"); for (f = R_FIRST ; s = dbseq(db, s, f) ; f = R_NEXT) print s; }'
+ @env LD_LIBRARY_PATH=${LIBEAWKDIR}:${LIB_DB}:${LIB_C} ./${PROG} 'BEGIN { use("db"); use("c"); info["type"] = "hash"; db = dbopen("/etc/pwd.db", O_RDONLY, 0666, info); while (dbseq(db, key, val, R_NEXT) == 0) print val["data"]; }'
@echo "33. Testing hex strings"
@env LD_LIBRARY_PATH=${LIBEAWKDIR}:${LIB_DB} ./${PROG} 'BEGIN { s="\x20a\x20b\x20c"; printf(",%s,\n", s) }'
@echo "34. Testing zlib"
Index: othersrc/external/historical/eawk/bin/expected
diff -u othersrc/external/historical/eawk/bin/expected:1.3 othersrc/external/historical/eawk/bin/expected:1.4
--- othersrc/external/historical/eawk/bin/expected:1.3 Wed Jun 5 00:55:25 2013
+++ othersrc/external/historical/eawk/bin/expected Thu Jun 6 01:45:56 2013
@@ -711,7 +711,7 @@ Makefile
<!-- ##### Footer ##### -->
- <!-- $NetBSD: expected,v 1.3 2013/06/05 00:55:25 agc Exp $ -->
+ <!-- $NetBSD: expected,v 1.4 2013/06/06 01:45:56 agc Exp $ -->
<div class="rowOfBoxes">
<div id="footer">
<div id="footerLogo">
@@ -742,7 +742,7 @@ Makefile
29. Testing netdiff
30. Testing netdiff with diffs
---
-> # $NetBSD: expected,v 1.3 2013/06/05 00:55:25 agc Exp $
+> # $NetBSD: expected,v 1.4 2013/06/06 01:45:56 agc Exp $
5c5
< PROG= eawk
---
@@ -914,8 +914,8 @@ Makefile
30. Testing unidiff with diffs
@@ -1,8 +1,8 @@
--# $NetBSD: expected,v 1.3 2013/06/05 00:55:25 agc Exp $
-+# $NetBSD: expected,v 1.3 2013/06/05 00:55:25 agc Exp $
+-# $NetBSD: expected,v 1.4 2013/06/06 01:45:56 agc Exp $
++# $NetBSD: expected,v 1.4 2013/06/06 01:45:56 agc Exp $
.include <bsd.own.mk>
Index: othersrc/external/historical/eawk/dist/run.c
diff -u othersrc/external/historical/eawk/dist/run.c:1.6 othersrc/external/historical/eawk/dist/run.c:1.7
--- othersrc/external/historical/eawk/dist/run.c:1.6 Wed Jun 5 02:59:47 2013
+++ othersrc/external/historical/eawk/dist/run.c Thu Jun 6 01:45:56 2013
@@ -1506,19 +1506,20 @@ eawk_assign(eawk_t *eawk, awknode_t **a,
y = eawk_execute(eawk, a[1]);
x = eawk_execute(eawk, a[0]);
if (n == ASSIGN) { /* ordinary assignment */
- if (x == y && !(x->type & (EAWK_FIELD|EAWK_RECORD))) /* self-assignment: */
- ; /* leave alone unless it's a field */
- else if ((y->type & (EAWK_STR|EAWK_NUM)) == (EAWK_STR|EAWK_NUM)) {
+ if (x == y && !(x->type & (EAWK_FIELD|EAWK_RECORD))) {
+ /* self-assignment: */
+ /* leave alone unless it's a field */
+ } else if ((y->type & (EAWK_STR|EAWK_NUM)) == (EAWK_STR|EAWK_NUM)) {
eawk_setsval(eawk, x, eawk_getsval(eawk, y));
x->num = eawk_getfval(eawk, y);
x->type |= EAWK_NUM;
- }
- else if (ISSTR(y))
+ } else if (ISSTR(y)) {
eawk_setsval(eawk, x, eawk_getsval(eawk, y));
- else if (ISNUM(y))
+ } else if (ISNUM(y)) {
eawk_setfval(eawk, x, eawk_getfval(eawk, y));
- else
+ } else {
eawk_funnyvar(eawk, y, "read value of");
+ }
TEMPFREE(eawk, y);
return(x);
}
Index: othersrc/external/historical/eawk/dist/tran.c
diff -u othersrc/external/historical/eawk/dist/tran.c:1.5 othersrc/external/historical/eawk/dist/tran.c:1.6
--- othersrc/external/historical/eawk/dist/tran.c:1.5 Wed Jun 5 02:59:47 2013
+++ othersrc/external/historical/eawk/dist/tran.c Thu Jun 6 01:45:56 2013
@@ -58,15 +58,14 @@ get_str_val(eawk_t *eawk, awkcell_t *cel
XFREE(cell->str);
if (cell->binsize > 0) {
cell->str = eawk_tostringN(eawk, s, cell->binsize);
+ }
+ if (modf(cell->num, &dtemp) == 0) {
+ /* it's integral */
+ snprintf(s, sizeof(s), "%.30g", cell->num);
} else {
- if (modf(cell->num, &dtemp) == 0) {
- /* it's integral */
- snprintf(s, sizeof(s), "%.30g", cell->num);
- } else {
- snprintf(s, sizeof(s), *fmt, cell->num);
- }
- cell->str = eawk_tostring(eawk, s);
+ snprintf(s, sizeof(s), *fmt, cell->num);
}
+ cell->str = eawk_tostring(eawk, s);
cell->type &= ~EAWK_DONTFREE;
cell->type |= EAWK_STR;
}
@@ -326,6 +325,7 @@ awkcell_t *
eawk_var_set(eawk_t *eawk, const char *name, const char *s, awknum_t f, unsigned t, awkarray_t *arr)
{
int h;
+ //char number[32];
awkcell_t *p;
if (name == NULL)
@@ -342,8 +342,8 @@ eawk_var_set(eawk_t *eawk, const char *n
return NULL;
}
p->name = eawk_tostring(eawk, name);
- p->str = eawk_tostring(eawk, (s) ? s : "");
p->num = f;
+ p->str = eawk_tostring(eawk, (s) ? s : "");
p->type = t;
p->csub = CUNK;
p->ctype = OCELL;
@@ -457,14 +457,16 @@ rehash(awkarray_t *arr)
awkcell_t *
eawk_array_lookup(awkarray_t *arr, const char *s)
{
- awkcell_t *p;
- int h;
+ awkcell_t *p;
+ int h;
h = eawk_hash(s, arr->size);
- for (p = arr->tab[h]; p != NULL; p = p->cnext)
- if (strcmp(s, p->name) == 0)
- return(p); /* found it */
- return(NULL); /* not found */
+ for (p = arr->tab[h]; p != NULL; p = p->cnext) {
+ if (strcmp(s, p->name) == 0) {
+ return p;
+ }
+ }
+ return NULL; /* not found */
}
/* set float val of a awkcell_t */
Index: othersrc/external/historical/eawk/extend/Makefile
diff -u othersrc/external/historical/eawk/extend/Makefile:1.3 othersrc/external/historical/eawk/extend/Makefile:1.4
--- othersrc/external/historical/eawk/extend/Makefile:1.3 Wed Jun 5 00:55:25 2013
+++ othersrc/external/historical/eawk/extend/Makefile Thu Jun 6 01:45:56 2013
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.3 2013/06/05 00:55:25 agc Exp $
+# $NetBSD: Makefile,v 1.4 2013/06/06 01:45:56 agc Exp $
SUBDIR+= archive
SUBDIR+= base64
@@ -10,6 +10,7 @@ SUBDIR+= c
.if exists(/usr/include/circa.h)
SUBDIR+= circa
.endif
+SUBDIR+= curses
SUBDIR+= db
SUBDIR+= digest
SUBDIR+= dirent
@@ -41,6 +42,9 @@ SUBDIR+= rs
SUBDIR+= soundex
SUBDIR+= sqlite3
SUBDIR+= termcap
+.if exists(/usr/include/threshold.h)
+SUBDIR+= threshold
+.endif
SUBDIR+= zlib
.include <bsd.subdir.mk>
Index: othersrc/external/historical/eawk/extend/db/db.c
diff -u othersrc/external/historical/eawk/extend/db/db.c:1.1 othersrc/external/historical/eawk/extend/db/db.c:1.2
--- othersrc/external/historical/eawk/extend/db/db.c:1.1 Fri May 31 05:56:37 2013
+++ othersrc/external/historical/eawk/extend/db/db.c Thu Jun 6 01:45:57 2013
@@ -63,26 +63,37 @@ n2ptr(int64_t n)
return u.p;
}
-#if 0
-/* set an array field */
-static int
-set_array_field(eawk_t *eawk, awkcell_t *array, const char *skey, int64_t keynum, const char *sval, int64_t valnum)
+/* parse the args on the way in, and set DBT struct accordingly */
+static inline void
+getargs(eawk_t *eawk, awkcell_t *array, DBT *dbt)
{
- char key[32];
- char val[32];
+ awkcell_t *cell;
- if (skey == NULL) {
- snprintf(key, sizeof(key), "%" PRIi64, (int64_t)keynum);
- skey = key;
+ memset(dbt, 0x0, sizeof(*dbt));
+ if (!(array->type & EAWK_ARRAY)) {
+ eawk_new_array(eawk, array);
}
- if (sval == NULL) {
- snprintf(val, sizeof(val), "%" PRIi64, (int64_t)valnum);
- sval = val;
+ if ((cell = eawk_array_lookup((awkarray_t *)(void *)array->str, "data")) != NULL) {
+ dbt->data = eawk_getsval(eawk, cell);
+ }
+ if ((cell = eawk_array_lookup((awkarray_t *)(void *)array->str, "size")) != NULL) {
+ dbt->size = (size_t)eawk_getfval(eawk, cell);
}
- eawk_var_set(eawk, skey, sval, atof(sval), EAWK_STR|EAWK_NUM, (awkarray_t *)(void *)array->str);
- return 1;
}
-#endif
+
+/* set the args on the way out, from the DBT struct */
+static inline void
+putargs(eawk_t *eawk, awkcell_t *array, DBT *dbt)
+{
+ awkcell_t *cell;
+
+ cell = eawk_var_set(eawk, "data", (const char *)dbt->data,
+ 0.0, EAWK_STR, (awkarray_t *)(void *)array->str);
+ /* now make sure and set the whole value, just in case of embedded NUL bytes */
+ eawk_setsvalN(eawk, cell, dbt->data, dbt->size);
+ eawk_var_set(eawk, "size", NULL, (awknum_t)dbt->size,
+ EAWK_NUM, (awkarray_t *)(void *)array->str);
+}
/* define the constants which relate to the CPP definitions */
static int
@@ -124,6 +135,8 @@ eawk_db_dbopen(void *veawk, char *name,
RECNOINFO recno;
HASHINFO hash;
DBTYPE d;
+ awkcell_t *array;
+ awkcell_t *cell;
eawk_t *eawk = (eawk_t *)veawk;
mode_t mode;
void *openinfo;
@@ -131,29 +144,35 @@ eawk_db_dbopen(void *veawk, char *name,
DB *db;
USE_ARG(name);
- if (argc != 4) {
- eawk_setfval(eawk, eawk->fp->retval, (awknum_t)0);
- return eawk->fp->retval;
- }
- memset(&btree, 0x0, sizeof(btree));
- memset(&recno, 0x0, sizeof(recno));
- memset(&hash, 0x0, sizeof(hash));
- /* get data off stack */
- file = (const char *)eawk_getsval(eawk, a[0]);
- flags = (int)eawk_getfval(eawk, a[1]);
- mode = (mode_t)eawk_getfval(eawk, a[2]);
- type = (const char *)eawk_getsval(eawk, a[3]);
- if (strcmp(type, "btree") == 0) {
- openinfo = &btree;
- d = DB_BTREE;
- } else if (strcmp(type, "hash") == 0) {
- openinfo = &hash;
- d = DB_HASH;
- } else {
- openinfo = &recno;
- d = DB_RECNO;
+ db = NULL;
+ if (argc == 4) {
+ memset(&btree, 0x0, sizeof(btree));
+ memset(&recno, 0x0, sizeof(recno));
+ memset(&hash, 0x0, sizeof(hash));
+ /* get data off stack */
+ file = (const char *)eawk_getsval(eawk, a[0]);
+ flags = (int)eawk_getfval(eawk, a[1]);
+ mode = (mode_t)eawk_getfval(eawk, a[2]);
+ array = a[3];
+ type = "btree";
+ if ((cell = eawk_array_lookup((awkarray_t *)(void *)array->str, "type")) != NULL) {
+ type = eawk_getsval(eawk, cell);
+ }
+ if (strcmp(type, "btree") == 0) {
+ openinfo = &btree;
+ d = DB_BTREE;
+ if ((cell = eawk_array_lookup((awkarray_t *)(void *)array->str, "lorder")) != NULL) {
+ btree.lorder = (int)eawk_getfval(eawk, cell);
+ }
+ } else if (strcmp(type, "hash") == 0) {
+ openinfo = &hash;
+ d = DB_HASH;
+ } else {
+ openinfo = &recno;
+ d = DB_RECNO;
+ }
+ db = dbopen(file, flags, mode, d, openinfo);
}
- db = dbopen(file, flags, mode, d, openinfo);
eawk_setfval(eawk, eawk->fp->retval, (awknum_t)p2num(db));
return eawk->fp->retval;
}
@@ -185,23 +204,18 @@ eawk_db_dbdel(void *veawk, char *name, i
{
unsigned flags;
eawk_t *eawk = (eawk_t *)veawk;
- char null[1];
- DBT k;
+ DBT key;
int rc;
DB *db;
USE_ARG(name);
rc = -1;
- null[0] = 0x0;
if (argc == 3) {
/* get data off stack */
if ((db = (DB *)n2ptr((int64_t)eawk_getfval(eawk, a[0]))) != NULL) {
- if ((k.data = eawk_getsval(eawk, a[1])) == NULL) {
- k.data = null;
- }
- k.size = strlen(k.data);
+ getargs(eawk, a[1], &key);
flags = (unsigned)eawk_getfval(eawk, a[2]);
- rc = (*db->del)(db, &k, flags);
+ rc = (*db->del)(db, &key, flags);
}
}
/* return code */
@@ -236,34 +250,27 @@ eawk_db_dbget(void *veawk, char *name, i
{
unsigned flags;
eawk_t *eawk = (eawk_t *)veawk;
- char null[1];
- char *val;
- DBT k;
- DBT v;
- size_t cc;
+ DBT key;
+ DBT val;
+ int rc;
DB *db;
USE_ARG(name);
- val = NULL;
- null[0] = 0x0;
- cc = 0;
- if (argc == 3) {
+ rc = -1;
+ if (argc == 4) {
/* get data off stack */
- memset(&v, 0x0, sizeof(v));
if ((db = (DB *)n2ptr((int64_t)eawk_getfval(eawk, a[0]))) != NULL) {
- if ((k.data = eawk_getsval(eawk, a[1])) == NULL) {
- k.data = null;
- }
- k.size = strlen(k.data);
- flags = (unsigned)eawk_getfval(eawk, a[2]);
- if ((*db->get)(db, &k, &v, flags) == 0) {
- val = v.data;
- cc = v.size;
+ getargs(eawk, a[1], &key);
+ getargs(eawk, a[2], &val);
+ flags = (unsigned)eawk_getfval(eawk, a[3]);
+ if ((rc = (*db->get)(db, &key, &val, flags)) == 0) {
+ putargs(eawk, a[1], &key);
+ putargs(eawk, a[2], &val);
}
}
}
/* return code */
- eawk_setsvalN(eawk, eawk->fp->retval, val, cc);
+ eawk_setfval(eawk, eawk->fp->retval, (awknum_t)rc);
return eawk->fp->retval;
}
@@ -273,29 +280,20 @@ eawk_db_dbput(void *veawk, char *name, i
{
unsigned flags;
eawk_t *eawk = (eawk_t *)veawk;
- char null[1];
- DBT k;
- DBT v;
+ DBT key;
+ DBT val;
int rc;
DB *db;
USE_ARG(name);
rc = -1;
- null[0] = 0x0;
if (argc == 4) {
/* get data off stack */
- memset(&v, 0x0, sizeof(v));
if ((db = (DB *)n2ptr((int64_t)eawk_getfval(eawk, a[0]))) != NULL) {
- if ((k.data = eawk_getsval(eawk, a[1])) == NULL) {
- k.data = null;
- }
- k.size = strlen(k.data);
- if ((v.data = eawk_getsval(eawk, a[2])) == NULL) {
- v.data = null;
- }
- v.size = strlen(v.data);
+ getargs(eawk, a[1], &key);
+ getargs(eawk, a[2], &val);
flags = (unsigned)eawk_getfval(eawk, a[3]);
- rc = (*db->put)(db, &k, &v, flags);
+ rc = (*db->put)(db, &key, &val, flags);
}
}
/* return code */
@@ -332,60 +330,27 @@ eawk_db_dbseq(void *veawk, char *name, i
{
unsigned flags;
eawk_t *eawk = (eawk_t *)veawk;
- char null[1];
- char *val;
- DBT k;
- DBT v;
- size_t cc;
+ DBT key;
+ DBT val;
+ int rc;
DB *db;
USE_ARG(name);
- val = NULL;
- cc = 0;
- null[0] = 0x0;
- if (argc == 3) {
+ rc = -1;
+ if (argc == 4) {
/* get data off stack */
- memset(&v, 0x0, sizeof(v));
if ((db = (DB *)n2ptr((int64_t)eawk_getfval(eawk, a[0]))) != NULL) {
- if ((k.data = eawk_getsval(eawk, a[1])) == NULL) {
- k.data = null;
- }
- k.size = strlen(k.data);
- flags = (unsigned)eawk_getfval(eawk, a[2]);
- if ((*db->seq)(db, &k, &v, flags) == 0) {
- val = v.data;
- cc = v.size;
+ getargs(eawk, a[1], &key);
+ getargs(eawk, a[2], &val);
+ flags = (unsigned)eawk_getfval(eawk, a[3]);
+ if ((rc = (*db->seq)(db, &key, &val, flags)) == 0) {
+ putargs(eawk, a[1], &key);
+ putargs(eawk, a[2], &val);
}
}
}
/* return code */
- eawk_setsvalN(eawk, eawk->fp->retval, val, cc);
- return eawk->fp->retval;
-}
-
-/* allocate function */
-static awkcell_t *
-eawk_db_alloc(void *veawk, char *name, int argc, awkcell_t **a)
-{
- size_t size;
- eawk_t *eawk = (eawk_t *)veawk;
- char *s;
- void *v;
-
- USE_ARG(name);
- size = sizeof(RECNOINFO);
- if (argc == 1) {
- /* get data off stack */
- s = eawk_getsval(eawk, a[0]);
- if (strcmp(s, "btree") == 0) {
- size = sizeof(BTREEINFO);
- } else if (strcmp(s, "hash") == 0) {
- size = sizeof(HASHINFO);
- }
- }
- v = calloc(size, 1);
- /* return code */
- eawk_setfval(eawk, eawk->fp->retval, (awknum_t)p2num(v));
+ eawk_setfval(eawk, eawk->fp->retval, rc);
return eawk->fp->retval;
}
@@ -410,7 +375,6 @@ eawk_use_db(eawk_t *eawk)
eawk_register_func(eawk, "db", "dbput", eawk_db_dbput);
eawk_register_func(eawk, "db", "dbseq", eawk_db_dbseq);
eawk_register_func(eawk, "db", "dbsync", eawk_db_dbsync);
- eawk_register_func(eawk, "db", "db_alloc", eawk_db_alloc);
}
return 1;
}
Index: othersrc/external/historical/eawk/scripts/tart.sh
diff -u othersrc/external/historical/eawk/scripts/tart.sh:1.1 othersrc/external/historical/eawk/scripts/tart.sh:1.2
--- othersrc/external/historical/eawk/scripts/tart.sh:1.1 Wed Jun 5 00:55:26 2013
+++ othersrc/external/historical/eawk/scripts/tart.sh Thu Jun 6 01:45:57 2013
@@ -1,6 +1,6 @@
#! /bin/sh
-# name is because i watched the tobias episode (S4E6) of Arrested Development
+# name is because i watched the tobias episode (S4E5) of Arrested Development
if [ $# -lt 1 ]; then
echo "Usage: $0 archive" >&2
Added files:
Index: othersrc/external/historical/eawk/extend/curses/Makefile
diff -u /dev/null othersrc/external/historical/eawk/extend/curses/Makefile:1.1
--- /dev/null Thu Jun 6 01:45:57 2013
+++ othersrc/external/historical/eawk/extend/curses/Makefile Thu Jun 6 01:45:57 2013
@@ -0,0 +1,16 @@
+# $NetBSD: Makefile,v 1.1 2013/06/06 01:45:57 agc Exp $
+
+.include <bsd.own.mk>
+
+DIST= ${.CURDIR}/../../dist
+.PATH: ${DIST}
+
+LIB= eawk-curses
+SRCS= curses.c
+CPPFLAGS+= -I. -I${DIST}
+MKMAN= no
+LDADD+= -lcurses
+
+WARNS= 5
+
+.include <bsd.lib.mk>
Index: othersrc/external/historical/eawk/extend/curses/curses.c
diff -u /dev/null othersrc/external/historical/eawk/extend/curses/curses.c:1.1
--- /dev/null Thu Jun 6 01:45:57 2013
+++ othersrc/external/historical/eawk/extend/curses/curses.c Thu Jun 6 01:45:57 2013
@@ -0,0 +1,416 @@
+/*-
+ * Copyright (c) 2013 Alistair Crooks <[email protected]>
+ * All rights reserved.
+ *
+ * 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 AUTHOR ``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 AUTHOR 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.
+ */
+#include <curses.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "eawk.h"
+
+#ifndef USE_ARG
+#define USE_ARG(x) /*LINTED*/(void)&x
+#endif
+
+/* convert number to ptr */
+static int64_t
+p2num(void *p)
+{
+ union {
+ void *p;
+ int64_t n;
+ } u;
+
+ u.p = p;
+ return u.n;
+}
+
+/* convert ptr to number */
+static void *
+n2ptr(int64_t n)
+{
+ union {
+ void *p;
+ int64_t n;
+ } u;
+
+ u.n = n;
+ return u.p;
+}
+
+/* define the constants which relate to the CPP definitions */
+static int
+eawk_curses_constants(eawk_t *eawk)
+{
+ eawk_define_constant(eawk, "ACS_DARROW", ACS_DARROW);
+ eawk_define_constant(eawk, "ACS_HLINE", ACS_HLINE);
+ eawk_define_constant(eawk, "ACS_LARROW", ACS_LARROW);
+ eawk_define_constant(eawk, "ACS_LLCORNER", ACS_LLCORNER);
+ eawk_define_constant(eawk, "ACS_LRCORNER", ACS_LRCORNER);
+ eawk_define_constant(eawk, "ACS_UARROW", ACS_UARROW);
+ eawk_define_constant(eawk, "ACS_ULCORNER", ACS_ULCORNER);
+ eawk_define_constant(eawk, "ACS_URCORNER", ACS_URCORNER);
+ eawk_define_constant(eawk, "ACS_RARROW", ACS_RARROW);
+ eawk_define_constant(eawk, "ACS_VLINE", ACS_VLINE);
+ eawk_define_constant(eawk, "ERR", ERR);
+ eawk_define_constant(eawk, "ERR", ERR);
+ eawk_define_constant(eawk, "OK", OK);
+ return 1;
+}
+
+/* extension module to provide curses functionality to eawk */
+
+/* endwin function */
+static awkcell_t *
+eawk_curses_endwin(void *veawk, char *name, int argc, awkcell_t **a)
+{
+ eawk_t *eawk = (eawk_t *)veawk;
+ int rc;
+
+ USE_ARG(a);
+ USE_ARG(name);
+ USE_ARG(argc);
+ rc = endwin();
+ eawk_setfval(eawk, eawk->fp->retval, (awknum_t)rc);
+ return eawk->fp->retval;
+}
+
+/* initscr function */
+static awkcell_t *
+eawk_curses_initscr(void *veawk, char *name, int argc, awkcell_t **a)
+{
+ WINDOW *win;
+ eawk_t *eawk = (eawk_t *)veawk;
+
+ USE_ARG(a);
+ USE_ARG(name);
+ USE_ARG(argc);
+ win = initscr();
+ eawk_define_constant(eawk, "LINES", LINES);
+ eawk_define_constant(eawk, "COLS", COLS);
+ eawk_setfval(eawk, eawk->fp->retval, (awknum_t)p2num(win));
+ return eawk->fp->retval;
+}
+
+/* touchwin function */
+static awkcell_t *
+eawk_curses_touchwin(void *veawk, char *name, int argc, awkcell_t **a)
+{
+ eawk_t *eawk = (eawk_t *)veawk;
+ WINDOW *win;
+ int rc;
+
+ USE_ARG(name);
+ rc = ERR;
+ if (argc == 1) {
+ /* get data off stack */
+ if ((win = (WINDOW *)n2ptr((int64_t)eawk_getfval(eawk, a[0]))) != NULL) {
+ rc = touchwin(win);
+ }
+ }
+ /* return code */
+ eawk_setfval(eawk, eawk->fp->retval, (awknum_t)rc);
+ return eawk->fp->retval;
+}
+
+/* waddch function */
+static awkcell_t *
+eawk_curses_waddch(void *veawk, char *name, int argc, awkcell_t **a)
+{
+ eawk_t *eawk = (eawk_t *)veawk;
+ WINDOW *win;
+ int ch;
+ int rc;
+
+ USE_ARG(name);
+ rc = ERR;
+ if (argc == 2) {
+ /* get data off stack */
+ if ((win = (WINDOW *)n2ptr((int64_t)eawk_getfval(eawk, a[0]))) != NULL) {
+ ch = (int)eawk_getfval(eawk, a[1]);
+ rc = waddch(win, ch);
+ }
+ }
+ /* return code */
+ eawk_setfval(eawk, eawk->fp->retval, (awknum_t)rc);
+ return eawk->fp->retval;
+}
+
+/* waddstr function */
+static awkcell_t *
+eawk_curses_waddstr(void *veawk, char *name, int argc, awkcell_t **a)
+{
+ const char *s;
+ eawk_t *eawk = (eawk_t *)veawk;
+ WINDOW *win;
+ int rc;
+
+ USE_ARG(name);
+ rc = ERR;
+ if (argc == 2) {
+ /* get data off stack */
+ if ((win = (WINDOW *)n2ptr((int64_t)eawk_getfval(eawk, a[0]))) != NULL) {
+ s = (const char *)eawk_getsval(eawk, a[1]);
+ rc = waddstr(win, s);
+ }
+ }
+ /* return code */
+ eawk_setfval(eawk, eawk->fp->retval, (awknum_t)rc);
+ return eawk->fp->retval;
+}
+
+/* wclear function */
+static awkcell_t *
+eawk_curses_wclear(void *veawk, char *name, int argc, awkcell_t **a)
+{
+ eawk_t *eawk = (eawk_t *)veawk;
+ WINDOW *win;
+ int rc;
+
+ USE_ARG(name);
+ rc = ERR;
+ if (argc == 1) {
+ /* get data off stack */
+ if ((win = (WINDOW *)n2ptr((int64_t)eawk_getfval(eawk, a[0]))) != NULL) {
+ rc = wclear(win);
+ }
+ }
+ /* return code */
+ eawk_setfval(eawk, eawk->fp->retval, (awknum_t)rc);
+ return eawk->fp->retval;
+}
+
+/* werase function */
+static awkcell_t *
+eawk_curses_werase(void *veawk, char *name, int argc, awkcell_t **a)
+{
+ eawk_t *eawk = (eawk_t *)veawk;
+ WINDOW *win;
+ int rc;
+
+ USE_ARG(name);
+ rc = ERR;
+ if (argc == 1) {
+ /* get data off stack */
+ if ((win = (WINDOW *)n2ptr((int64_t)eawk_getfval(eawk, a[0]))) != NULL) {
+ rc = werase(win);
+ }
+ }
+ /* return code */
+ eawk_setfval(eawk, eawk->fp->retval, (awknum_t)rc);
+ return eawk->fp->retval;
+}
+
+/* wgetch function */
+static awkcell_t *
+eawk_curses_wgetch(void *veawk, char *name, int argc, awkcell_t **a)
+{
+ eawk_t *eawk = (eawk_t *)veawk;
+ WINDOW *win;
+ int rc;
+
+ USE_ARG(name);
+ rc = ERR;
+ if (argc == 1) {
+ /* get data off stack */
+ if ((win = (WINDOW *)n2ptr((int64_t)eawk_getfval(eawk, a[0]))) != NULL) {
+ rc = wgetch(win);
+ }
+ }
+ /* return code */
+ eawk_setfval(eawk, eawk->fp->retval, (awknum_t)rc);
+ return eawk->fp->retval;
+}
+
+/* wmove function */
+static awkcell_t *
+eawk_curses_wmove(void *veawk, char *name, int argc, awkcell_t **a)
+{
+ eawk_t *eawk = (eawk_t *)veawk;
+ WINDOW *win;
+ int rc;
+ int y;
+ int x;
+
+ USE_ARG(name);
+ rc = ERR;
+ if (argc == 3) {
+ /* get data off stack */
+ if ((win = (WINDOW *)n2ptr((int64_t)eawk_getfval(eawk, a[0]))) != NULL) {
+ y = (int)eawk_getfval(eawk, a[1]);
+ x = (int)eawk_getfval(eawk, a[2]);
+ rc = wmove(win, y, x);
+ }
+ }
+ /* return code */
+ eawk_setfval(eawk, eawk->fp->retval, (awknum_t)rc);
+ return eawk->fp->retval;
+}
+
+/* newwin function */
+static awkcell_t *
+eawk_curses_newwin(void *veawk, char *name, int argc, awkcell_t **a)
+{
+ eawk_t *eawk = (eawk_t *)veawk;
+ WINDOW *win;
+ int begy;
+ int begx;
+ int y;
+ int x;
+
+ USE_ARG(name);
+ win = NULL;
+ if (argc == 4) {
+ /* get data off stack */
+ y = (int)eawk_getfval(eawk, a[0]);
+ x = (int)eawk_getfval(eawk, a[1]);
+ begy = (int)eawk_getfval(eawk, a[2]);
+ begx = (int)eawk_getfval(eawk, a[3]);
+ win = newwin(y, x, begy, begx);
+ }
+ /* return code */
+ eawk_setfval(eawk, eawk->fp->retval, (awknum_t)p2num(win));
+ return eawk->fp->retval;
+}
+
+/* wrefresh function */
+static awkcell_t *
+eawk_curses_wrefresh(void *veawk, char *name, int argc, awkcell_t **a)
+{
+ eawk_t *eawk = (eawk_t *)veawk;
+ WINDOW *win;
+ int rc;
+
+ USE_ARG(name);
+ rc = ERR;
+ if (argc == 1) {
+ /* get data off stack */
+ if ((win = (WINDOW *)n2ptr((int64_t)eawk_getfval(eawk, a[0]))) != NULL) {
+ rc = wrefresh(win);
+ }
+ }
+ /* return code */
+ eawk_setfval(eawk, eawk->fp->retval, (awknum_t)rc);
+ return eawk->fp->retval;
+}
+
+/* wresize function */
+static awkcell_t *
+eawk_curses_wresize(void *veawk, char *name, int argc, awkcell_t **a)
+{
+ eawk_t *eawk = (eawk_t *)veawk;
+ WINDOW *win;
+ int rc;
+ int y;
+ int x;
+
+ USE_ARG(name);
+ rc = ERR;
+ if (argc == 3) {
+ /* get data off stack */
+ if ((win = (WINDOW *)n2ptr((int64_t)eawk_getfval(eawk, a[0]))) != NULL) {
+ y = (int)eawk_getfval(eawk, a[1]);
+ x = (int)eawk_getfval(eawk, a[2]);
+ rc = wresize(win, y, x);
+ }
+ }
+ /* return code */
+ eawk_setfval(eawk, eawk->fp->retval, (awknum_t)rc);
+ return eawk->fp->retval;
+}
+
+/* wstandout function */
+static awkcell_t *
+eawk_curses_wstandout(void *veawk, char *name, int argc, awkcell_t **a)
+{
+ eawk_t *eawk = (eawk_t *)veawk;
+ WINDOW *win;
+ int rc;
+
+ USE_ARG(name);
+ rc = ERR;
+ if (argc == 1) {
+ /* get data off stack */
+ if ((win = (WINDOW *)n2ptr((int64_t)eawk_getfval(eawk, a[0]))) != NULL) {
+ rc = wstandout(win);
+ }
+ }
+ /* return code */
+ eawk_setfval(eawk, eawk->fp->retval, (awknum_t)rc);
+ return eawk->fp->retval;
+}
+
+/* wstandend function */
+static awkcell_t *
+eawk_curses_wstandend(void *veawk, char *name, int argc, awkcell_t **a)
+{
+ eawk_t *eawk = (eawk_t *)veawk;
+ WINDOW *win;
+ int rc;
+
+ USE_ARG(name);
+ rc = ERR;
+ if (argc == 1) {
+ /* get data off stack */
+ if ((win = (WINDOW *)n2ptr((int64_t)eawk_getfval(eawk, a[0]))) != NULL) {
+ rc = wstandend(win);
+ }
+ }
+ /* return code */
+ eawk_setfval(eawk, eawk->fp->retval, (awknum_t)rc);
+ return eawk->fp->retval;
+}
+
+
+
+/*******************************************************************/
+/* now the glue to register functions when use("curses") is called */
+/*******************************************************************/
+
+int eawk_use_curses(eawk_t */*eawk*/);
+
+/* register digest functions */
+int
+eawk_use_curses(eawk_t *eawk)
+{
+ if (eawk_find_lib(eawk, "curses") < 0) {
+ eawk_curses_constants(eawk);
+ eawk_register_func(eawk, "curses", "endwin", eawk_curses_endwin);
+ eawk_register_func(eawk, "curses", "initscr", eawk_curses_initscr);
+ eawk_register_func(eawk, "curses", "newwin", eawk_curses_newwin);
+ eawk_register_func(eawk, "curses", "touchwin", eawk_curses_touchwin);
+ eawk_register_func(eawk, "curses", "waddch", eawk_curses_waddch);
+ eawk_register_func(eawk, "curses", "waddstr", eawk_curses_waddstr);
+ eawk_register_func(eawk, "curses", "wclear", eawk_curses_wclear);
+ eawk_register_func(eawk, "curses", "werase", eawk_curses_werase);
+ eawk_register_func(eawk, "curses", "wgetch", eawk_curses_wgetch);
+ eawk_register_func(eawk, "curses", "wmove", eawk_curses_wmove);
+ eawk_register_func(eawk, "curses", "wrefresh", eawk_curses_wrefresh);
+ eawk_register_func(eawk, "curses", "wresize", eawk_curses_wresize);
+ eawk_register_func(eawk, "curses", "wstandend", eawk_curses_wstandend);
+ eawk_register_func(eawk, "curses", "wstandout", eawk_curses_wstandout);
+ }
+ return 1;
+}
Index: othersrc/external/historical/eawk/extend/curses/shlib_version
diff -u /dev/null othersrc/external/historical/eawk/extend/curses/shlib_version:1.1
--- /dev/null Thu Jun 6 01:45:57 2013
+++ othersrc/external/historical/eawk/extend/curses/shlib_version Thu Jun 6 01:45:57 2013
@@ -0,0 +1,2 @@
+major=0
+minor=0
Index: othersrc/external/historical/eawk/extend/threshold/Makefile
diff -u /dev/null othersrc/external/historical/eawk/extend/threshold/Makefile:1.1
--- /dev/null Thu Jun 6 01:45:57 2013
+++ othersrc/external/historical/eawk/extend/threshold/Makefile Thu Jun 6 01:45:57 2013
@@ -0,0 +1,16 @@
+# $NetBSD: Makefile,v 1.1 2013/06/06 01:45:57 agc Exp $
+
+.include <bsd.own.mk>
+
+DIST= ${.CURDIR}/../../dist
+.PATH: ${DIST}
+
+LIB= eawk-threshold
+SRCS= threshold.c
+CPPFLAGS+= -I. -I${DIST}
+MKMAN= no
+LDADD+= -lthreshold
+
+WARNS= 5
+
+.include <bsd.lib.mk>
Index: othersrc/external/historical/eawk/extend/threshold/shlib_version
diff -u /dev/null othersrc/external/historical/eawk/extend/threshold/shlib_version:1.1
--- /dev/null Thu Jun 6 01:45:57 2013
+++ othersrc/external/historical/eawk/extend/threshold/shlib_version Thu Jun 6 01:45:57 2013
@@ -0,0 +1,2 @@
+major=0
+minor=0
Index: othersrc/external/historical/eawk/extend/threshold/threshold.c
diff -u /dev/null othersrc/external/historical/eawk/extend/threshold/threshold.c:1.1
--- /dev/null Thu Jun 6 01:45:57 2013
+++ othersrc/external/historical/eawk/extend/threshold/threshold.c Thu Jun 6 01:45:57 2013
@@ -0,0 +1,335 @@
+/*-
+ * Copyright (c) 2013 Alistair Crooks <[email protected]>
+ * All rights reserved.
+ *
+ * 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 AUTHOR ``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 AUTHOR 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.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <threshold.h>
+
+#include "eawk.h"
+
+#ifndef USE_ARG
+#define USE_ARG(x) /*LINTED*/(void)&x
+#endif
+
+/* convert number to ptr */
+static int64_t
+p2num(void *p)
+{
+ union {
+ void *p;
+ int64_t n;
+ } u;
+
+ u.p = p;
+ return u.n;
+}
+
+/* convert ptr to number */
+static void *
+n2ptr(int64_t n)
+{
+ union {
+ void *p;
+ int64_t n;
+ } u;
+
+ u.n = n;
+ return u.p;
+}
+
+/* set the args on the way out, from the DBT struct */
+static inline void
+putargs(eawk_t *eawk, awkcell_t *array, void *data, size_t size)
+{
+ awkcell_t *cell;
+
+ cell = eawk_var_set(eawk, "data", (const char *)data,
+ 0.0, EAWK_STR, (awkarray_t *)(void *)array->str);
+ /* now make sure and set the whole value, just in case of embedded NUL bytes */
+ eawk_setsvalN(eawk, cell, data, size);
+ eawk_var_set(eawk, "size", NULL, (awknum_t)size,
+ EAWK_NUM, (awkarray_t *)(void *)array->str);
+}
+
+/* define the constants which relate to the CPP definitions */
+static int
+eawk_threshold_constants(eawk_t *eawk)
+{
+ eawk_define_constant(eawk, "THRESH_MAGIC_LENGTH", THRESH_MAGIC_LENGTH);
+ eawk_define_constant(eawk, "THRESH_MAX_SHARES", THRESH_MAX_SHARES);
+ eawk_define_constant(eawk, "THRESH_SPLIT_SOURCE", THRESH_SPLIT_SOURCE);
+ eawk_define_constant(eawk, "THRESH_JOIN_DEST", THRESH_JOIN_DEST);
+ return 1;
+}
+
+/* extension module to provide curses functionality to eawk */
+
+/* endwin function */
+static awkcell_t *
+eawk_threshold_thresh_alloc(void *veawk, char *name, int argc, awkcell_t **a)
+{
+ const char *type;
+ eawk_t *eawk = (eawk_t *)veawk;
+ void *v;
+
+ USE_ARG(name);
+ v = NULL;
+ if (argc == 1) {
+ type = eawk_getsval(eawk, a[0]);
+ if (strcmp(type, "header") == 0) {
+ v = calloc(sizeof(thresh_head_t), 1);
+ } else if (strcmp(type, "threshold") == 0) {
+ v = calloc(sizeof(threshold_t), 1);
+ }
+ }
+ eawk_setfval(eawk, eawk->fp->retval, (awknum_t)p2num(v));
+ return eawk->fp->retval;
+}
+
+/* split function */
+static awkcell_t *
+eawk_threshold_thresh_split(void *veawk, char *name, int argc, awkcell_t **a)
+{
+ threshold_t *t;
+ eawk_t *eawk = (eawk_t *)veawk;
+ int rc;
+
+ USE_ARG(name);
+ rc = 0;
+ if (argc == 1) {
+ t = (threshold_t *)n2ptr((int64_t)eawk_getfval(eawk, a[0]));
+ rc = thresh_split(t);
+ }
+ eawk_setfval(eawk, eawk->fp->retval, (awknum_t)rc);
+ return eawk->fp->retval;
+}
+
+/* end function */
+static awkcell_t *
+eawk_threshold_thresh_end(void *veawk, char *name, int argc, awkcell_t **a)
+{
+ threshold_t *t;
+ eawk_t *eawk = (eawk_t *)veawk;
+ int rc;
+
+ USE_ARG(name);
+ rc = 0;
+ if (argc == 1) {
+ t = (threshold_t *)n2ptr((int64_t)eawk_getfval(eawk, a[0]));
+ rc = thresh_end(t);
+ }
+ eawk_setfval(eawk, eawk->fp->retval, (awknum_t)rc);
+ return eawk->fp->retval;
+}
+
+/* combine function */
+static awkcell_t *
+eawk_threshold_thresh_combine(void *veawk, char *name, int argc, awkcell_t **a)
+{
+ threshold_t *t;
+ eawk_t *eawk = (eawk_t *)veawk;
+ int rc;
+
+ USE_ARG(name);
+ rc = 0;
+ if (argc == 1) {
+ t = (threshold_t *)n2ptr((int64_t)eawk_getfval(eawk, a[0]));
+ rc = thresh_combine(t);
+ }
+ eawk_setfval(eawk, eawk->fp->retval, (awknum_t)rc);
+ return eawk->fp->retval;
+}
+
+/* join function */
+static awkcell_t *
+eawk_threshold_thresh_join(void *veawk, char *name, int argc, awkcell_t **a)
+{
+ threshold_t *t;
+ eawk_t *eawk = (eawk_t *)veawk;
+ int rc;
+
+ USE_ARG(name);
+ rc = 0;
+ if (argc == 1) {
+ t = (threshold_t *)n2ptr((int64_t)eawk_getfval(eawk, a[0]));
+ rc = thresh_join(t);
+ }
+ eawk_setfval(eawk, eawk->fp->retval, (awknum_t)rc);
+ return eawk->fp->retval;
+}
+
+/* parse the args on the way in, and set DBT struct accordingly */
+static inline void
+getargs(eawk_t *eawk, awkcell_t *array, char **data, ssize_t *size)
+{
+ awkcell_t *cell;
+
+ if (!(array->type & EAWK_ARRAY)) {
+ eawk_new_array(eawk, array);
+ }
+ if ((cell = eawk_array_lookup((awkarray_t *)(void *)array->str, "data")) != NULL) {
+ *data = eawk_getsval(eawk, cell);
+ }
+ if ((cell = eawk_array_lookup((awkarray_t *)(void *)array->str, "size")) != NULL) {
+ *size = (ssize_t)eawk_getfval(eawk, cell);
+ }
+}
+
+/* add share function */
+static awkcell_t *
+eawk_threshold_thresh_add_share(void *veawk, char *name, int argc, awkcell_t **a)
+{
+ threshold_t *t;
+ unsigned share;
+ ssize_t size;
+ eawk_t *eawk = (eawk_t *)veawk;
+ char *data;
+ int rc;
+
+ USE_ARG(name);
+ rc = 0;
+ data = NULL;
+ size = 0;
+ if (argc == 3) {
+ t = (threshold_t *)n2ptr((int64_t)eawk_getfval(eawk, a[0]));
+ share = (unsigned)eawk_getfval(eawk, a[1]);
+ getargs(eawk, a[2], &data, &size);
+ rc = thresh_add_share(t, share, data, size);
+ } else if (argc == 4) {
+ t = (threshold_t *)n2ptr((int64_t)eawk_getfval(eawk, a[0]));
+ share = (unsigned)eawk_getfval(eawk, a[1]);
+ data = eawk_getsval(eawk, a[2]);
+ size = (ssize_t)eawk_getfval(eawk, a[3]);
+ rc = thresh_add_share(t, share, data, size);
+ }
+ eawk_setfval(eawk, eawk->fp->retval, (awknum_t)rc);
+ return eawk->fp->retval;
+}
+
+/* init function */
+static awkcell_t *
+eawk_threshold_thresh_init(void *veawk, char *name, int argc, awkcell_t **a)
+{
+ threshold_t *t;
+ const char *type;
+ unsigned thresh;
+ unsigned total;
+ eawk_t *eawk = (eawk_t *)veawk;
+ int rc;
+
+ USE_ARG(name);
+ rc = 0;
+ if (argc == 4) {
+ t = (threshold_t *)n2ptr((int64_t)eawk_getfval(eawk, a[0]));
+ type = eawk_getsval(eawk, a[1]);
+ thresh = (unsigned)eawk_getfval(eawk, a[2]);
+ total = (unsigned)eawk_getfval(eawk, a[3]);
+ rc = thresh_init(t, type, thresh, total);
+ }
+ eawk_setfval(eawk, eawk->fp->retval, (awknum_t)rc);
+ return eawk->fp->retval;
+}
+
+/* get share function */
+static awkcell_t *
+eawk_threshold_thresh_get_share(void *veawk, char *name, int argc, awkcell_t **a)
+{
+ threshold_t *t;
+ unsigned share;
+ size_t size;
+ eawk_t *eawk = (eawk_t *)veawk;
+ void *data;
+ int rc;
+
+ USE_ARG(name);
+ rc = 0;
+ if (argc == 3) {
+ t = (threshold_t *)n2ptr((int64_t)eawk_getfval(eawk, a[0]));
+ share = (unsigned)eawk_getfval(eawk, a[1]);
+ rc = thresh_get_share(t, share, &data, &size);
+ putargs(eawk, a[2], data, size);
+ }
+ eawk_setfval(eawk, eawk->fp->retval, (awknum_t)rc);
+ return eawk->fp->retval;
+}
+
+/* write share function */
+static awkcell_t *
+eawk_threshold_thresh_write_share(void *veawk, char *name, int argc, awkcell_t **a)
+{
+ threshold_t *t;
+ const char *f;
+ unsigned share;
+ eawk_t *eawk = (eawk_t *)veawk;
+ int rc;
+
+ USE_ARG(name);
+ rc = 0;
+ if (argc == 3) {
+ t = (threshold_t *)n2ptr((int64_t)eawk_getfval(eawk, a[0]));
+ share = (unsigned)eawk_getfval(eawk, a[1]);
+ f = (const char *)eawk_getsval(eawk, a[2]);
+ rc = thresh_write_share(t, share, f);
+ }
+ eawk_setfval(eawk, eawk->fp->retval, (awknum_t)rc);
+ return eawk->fp->retval;
+}
+
+
+
+
+/*******************************************************************/
+/* now the glue to register functions when use("threshold") is called */
+/*******************************************************************/
+
+int eawk_use_threshold(eawk_t */*eawk*/);
+
+/* register digest functions */
+int
+eawk_use_threshold(eawk_t *eawk)
+{
+ if (eawk_find_lib(eawk, "threshold") < 0) {
+ eawk_threshold_constants(eawk);
+ eawk_register_func(eawk, "threshold", "thresh_add_share", eawk_threshold_thresh_add_share);
+ eawk_register_func(eawk, "threshold", "thresh_alloc", eawk_threshold_thresh_alloc);
+ eawk_register_func(eawk, "threshold", "thresh_combine", eawk_threshold_thresh_combine);
+ eawk_register_func(eawk, "threshold", "thresh_end", eawk_threshold_thresh_end);
+#if 0
+ eawk_register_func(eawk, "threshold", "thresh_fmt_header", eawk_threshold_thresh_fmt_header);
+ eawk_register_func(eawk, "threshold", "thresh_get_header", eawk_threshold_thresh_get_header);
+#endif
+ eawk_register_func(eawk, "threshold", "thresh_get_share", eawk_threshold_thresh_get_share);
+ eawk_register_func(eawk, "threshold", "thresh_init", eawk_threshold_thresh_init);
+ eawk_register_func(eawk, "threshold", "thresh_join", eawk_threshold_thresh_join);
+#if 0
+ eawk_register_func(eawk, "threshold", "thresh_sane_header", eawk_threshold_thresh_sane_header);
+#endif
+ eawk_register_func(eawk, "threshold", "thresh_split", eawk_threshold_thresh_split);
+ eawk_register_func(eawk, "threshold", "thresh_write_share", eawk_threshold_thresh_write_share);
+ }
+ return 1;
+}
Index: othersrc/external/historical/eawk/scripts/rain.sh
diff -u /dev/null othersrc/external/historical/eawk/scripts/rain.sh:1.1
--- /dev/null Thu Jun 6 01:45:57 2013
+++ othersrc/external/historical/eawk/scripts/rain.sh Thu Jun 6 01:45:57 2013
@@ -0,0 +1,36 @@
+#! /bin/sh
+
+env LD_LIBRARY_PATH=lib:extend/curses bin/eawk '
+BEGIN {
+ use("curses");
+ w = initscr();
+ cols = COLS - 4; lines = LINES - 4;
+ for (j = 4 ; j >= 0 ; --j) { xpos[j] = (rand() * cols) + 2; ypos[j] = (rand() * lines) + 2; }
+ for (j = 0; 1; ) {
+ x = (rand() * cols) + 2;
+ y = (rand() * lines) + 2;
+ wmove(w, y, x); waddstr(w, ".");
+ wmove(w, ypos[j], xpos[j]); waddstr(w, "o");
+ if (j-- == 0) j = 4;
+ wmove(w, ypos[j], xpos[j]); waddstr(w, "O");
+ if (j-- == 0) j = 4;
+ wmove(w, ypos[j] - 1, xpos[j]); waddstr(w, "-");
+ wmove(w, ypos[j], xpos[j] - 1); waddstr(w, "|.|");
+ wmove(w, ypos[j] + 1, xpos[j]); waddstr(w, "-");
+ if (j-- == 0) j = 4;
+ wmove(w, ypos[j] - 2, xpos[j]); waddstr(w, "-");
+ wmove(w, ypos[j] - 1, xpos[j] - 1); waddstr(w, "/ \\");
+ wmove(w, ypos[j], xpos[j] - 2); waddstr(w, "| O |");
+ wmove(w, ypos[j] + 1, xpos[j] - 1); waddstr(w, "\\ /");
+ wmove(w, ypos[j] + 2, xpos[j]); waddstr(w, "-");
+ if (j-- == 0) j = 4;
+ wmove(w, ypos[j] - 2, xpos[j]); waddstr(w, " ");
+ wmove(w, ypos[j] - 1, xpos[j] - 1); waddstr(w, " ");
+ wmove(w, ypos[j], xpos[j] - 2); waddstr(w, " ");
+ wmove(w, ypos[j] + 1, xpos[j] - 1); waddstr(w, " ");
+ wmove(w, ypos[j] + 2, xpos[j]); waddstr(w, " ");
+ xpos[j] = x;
+ ypos[j] = y;
+ wrefresh(w);
+ }
+}'
Index: othersrc/external/historical/eawk/scripts/test-thresh.sh
diff -u /dev/null othersrc/external/historical/eawk/scripts/test-thresh.sh:1.1
--- /dev/null Thu Jun 6 01:45:57 2013
+++ othersrc/external/historical/eawk/scripts/test-thresh.sh Thu Jun 6 01:45:57 2013
@@ -0,0 +1,9 @@
+#! /bin/sh
+
+cp $1 $1.test
+sh scripts/threshold.sh -t 5/10 -s $1.test
+ls -al $1.test $1.test.*
+codecs hexdump $1.test.000
+sh scripts/threshold.sh -t 5/10 $1.test
+diff $1.test $1.test.joined
+rm -f $1.test $1.test.*
Index: othersrc/external/historical/eawk/scripts/threshold.sh
diff -u /dev/null othersrc/external/historical/eawk/scripts/threshold.sh:1.1
--- /dev/null Thu Jun 6 01:45:57 2013
+++ othersrc/external/historical/eawk/scripts/threshold.sh Thu Jun 6 01:45:57 2013
@@ -0,0 +1,41 @@
+#! /bin/sh
+
+alg="ida"
+splitting=0
+thresh=5
+total=10
+
+while [ $# -gt 0 ]; do
+ case "$1" in
+ -a) alg=$2; shift ;;
+ -s) splitting=1 ;;
+ -t) thresh=${2%/*}; total=${2#*/}; shift ;;
+ *) break ;;
+ esac
+ shift
+done
+
+if [ $# -lt 1 ]; then
+ echo "Usage: threshold [-t a/b] [-a algorithm] [-s] file" >&2
+ exit 1
+fi
+
+env LD_LIBRARY_PATH=lib:extend/threshold bin/eawk \
+ -v f=$1 -v alg=${alg} -v thresh=${thresh} -v shares=${total} -v splitting=${splitting} '
+BEGIN {
+ use("threshold");
+ t = thresh_alloc("threshold");
+ if (splitting) {
+ if (!thresh_init(t, alg, thresh, shares)) print "phooey#1"
+ if (!thresh_add_share(t, THRESH_SPLIT_SOURCE, f, -1)) print "phooey#2"
+ if (!thresh_split(t)) print "phooey#3"
+ for (i = 0 ; i < shares ; i++)
+ thresh_write_share(t, i, sprintf("%s.%03d", f, i))
+ } else {
+ for (i = 1 ; i <= thresh ; i++)
+ thresh_add_share(t, i - 1, sprintf("%s.%03d", f, i), -1);
+ thresh_combine(t);
+ thresh_write_share(t, THRESH_JOIN_DEST, sprintf("%s.joined", f))
+ }
+ thresh_end(t)
+}'