* Copyright (C) 1987 by the Massachusetts Institute of Technology
*
* $Log$
- * Revision 1.2 1987-06-08 03:08:15 wesommer
- * Reindented; added header.
+ * Revision 1.3 1987-08-22 17:44:39 wesommer
+ * Cleaning up after mike again.
*
+ * Revision 1.2 87/06/08 03:08:15 wesommer
+ * Reindented; added header.
+ *
*/
#ifndef lint
return((struct query *)0);
}
+list_queries(action, actarg)
+ int (*action)();
+ int actarg;
+{
+ register struct query *q;
+ register int i;
+ static struct query **squeries = (struct query **)0;
+ register struct query **sq;
+ char qnames[80];
+ char *qnp;
+ int qcmp();
+
+ if (squeries == (struct query **)0)
+ {
+ sq = (struct query **)malloc(QueryCount * sizeof (struct query *));
+ squeries = sq;
+ q = Queries;
+ for (i = QueryCount; --i >= 0; )
+ *sq++ = q++;
+ qsort(squeries, QueryCount, sizeof (struct query *), qcmp);
+ }
+
+ q = Queries;
+ sq = squeries;
+
+ qnp = qnames;
+ for (i = QueryCount; --i >= 0; sq++) {
+ sprintf(qnames, "%s (%s)", (*sq)->name, (*sq)->shortname);
+ (*action)(1, &qnp, actarg);
+ }
+}
+
+help_query(q, action, actarg)
+ register struct query *q;
+ int (*action)();
+ int actarg;
+{
+ register int argcount;
+ register int i;
+ char argn[32];
+ char qname[80];
+ char *argv[32];
+
+ argcount = q->argc;
+ if (q->type == UPDATE || q->type == APPEND) argcount += q->vcnt;
+
+ switch (argcount) {
+ case 0:
+ sprintf(qname, " %s ()", q->shortname);
+ argv[0] = qname;
+ (*action)(1, argv, actarg);
+ break;
+
+ case 1:
+ sprintf(qname, " %s (%s)", q->shortname, q->fields[0]);
+ argv[0] = qname;
+ (*action)(1, argv, actarg);
+ break;
+
+ case 2:
+ sprintf(qname, " %s (%s, %s)", q->shortname, q->fields[0],
+ q->fields[1]);
+ argv[0] = qname;
+ (*action)(1, argv, actarg);
+ break;
+
+ default:
+ sprintf(qname, " %s (%s", q->shortname, q->fields[0]);
+ argv[0] = qname;
+ argcount--;
+ for (i = 1; i < argcount; i++) argv[i] = q->fields[i];
+ sprintf(argn, "%s)", q->fields[argcount]);
+ argv[argcount] = argn;
+ (*action)(argcount+1, argv, actarg);
+ break;
+ }
+}
+
+qcmp(q1, q2)
+ struct query **q1;
+ struct query **q2;
+{
+ return(strcmp((*q1)->name, (*q2)->name));
+}
+
get_input_fields(q, argc, argv)
register struct query *q;
int *argc;
char ***argv;
{
*argv = q->fields;
- *argc = q->sargc + q->argc;
+ *argc = q->argc;
if (q->type == UPDATE || q->type == APPEND)
*argc += q->vcnt;
}
{
if (q->type == RETRIEVE) {
*argc = q->vcnt;
- *argv = &q->fields[q->sargc + q->argc];
+ *argv = &q->fields[q->argc];
} else {
*argc = 0;
*argv = (char **)0;
if (q->type != RETRIEVE) return((char *)0);
if (*name == '*') name++;
- fp = &q->fields[q->sargc + q->argc];
+ fp = &q->fields[q->argc];
for (i = 0; i < q->vcnt; i++) {
field = *fp++;
if (*field == '*') field++;
register int i;
register int n;
- n = q->sargc + q->argc;
+ n = q->argc;
if (q->type == UPDATE || q->type == APPEND) n += q->vcnt;
if (*name == '*') name++;
q->q_data = data;
}
+sq_save_args(argc, argv, sq)
+ register struct save_queue *sq;
+ register int argc;
+ register char *argv[];
+{
+ register char **argv_copy;
+ register int i;
+ register int n;
+
+ argv_copy = (char **)malloc(argc * sizeof (char *));
+ for (i = 0; i < argc; i++) {
+ n = strlen(argv[i]) + 1;
+ argv_copy[i] = (char *)malloc(n);
+ bcopy(argv[i], argv_copy[i], n);
+ }
+
+ sq_save_data(sq, argv_copy);
+}
+
+sq_save_unique_data(sq, data)
+ register struct save_queue *sq;
+ char *data;
+{
+ register struct save_queue *q;
+
+ for (q = sq->q_next; q != sq; q = sq->q_next)
+ if (q->q_data == data) return;
+
+ sq_save_data(sq, data);
+}
+
sq_get_data(sq, data)
register struct save_queue *sq;
register char **data;