3 * Copyright (C) 1987-1998 by the Massachusetts Institute of Technology
4 * For copying and distribution information, please see the file
8 #include <mit-copyright.h>
16 extern struct query Queries2[];
17 extern int QueryCount2;
19 int qcmp(const void *q1, const void *q2);
21 struct query *get_query_by_name(char *name)
29 if (strlen(name) == 4)
33 if (!strcmp(q->shortname, name))
42 if (!strcmp(q->name, name))
51 void list_queries(int (*action)(int, char *[], void *), void *actarg)
55 static struct query **squeries2 = NULL;
64 sq = xmalloc(count * sizeof(struct query *));
67 for (i = count; --i >= 0; )
69 qsort(squeries2, count, sizeof(struct query *), qcmp);
74 for (i = count; --i >= 0; sq++)
76 sprintf(qnames, "%s (%s)", (*sq)->name, (*sq)->shortname);
77 (*action)(1, &qnp, actarg);
79 strcpy(qnames, "_help");
80 (*action)(1, &qnp, actarg);
81 strcpy(qnames, "_list_queries");
82 (*action)(1, &qnp, actarg);
83 strcpy(qnames, "_list_users");
84 (*action)(1, &qnp, actarg);
87 void help_query(struct query *q, int (*action)(int, char *[], void *),
98 if (q->type == UPDATE || q->type == APPEND)
104 sprintf(qname, " %s, %s ()", q->name, q->shortname);
110 sprintf(qname, " %s, %s (%s)", q->name, q->shortname, q->fields[0]);
116 sprintf(qname, " %s, %s (%s, %s)", q->name, q->shortname,
117 q->fields[0], q->fields[1]);
123 sprintf(qname, " %s, %s (%s", q->name, q->shortname, q->fields[0]);
126 for (i = 1; i < argcount; i++)
127 argv[i] = q->fields[i];
128 sprintf(argn, "%s)", q->fields[argcount]);
129 argv[argcount++] = argn;
133 if (q->type == RETRIEVE)
135 sprintf(argr, "%s => %s", argv[--argcount], q->fields[q->argc]);
136 argv[argcount++] = argr;
139 for (i = q->argc + 1; i < q->vcnt + q->argc; i++)
140 argv[argcount++] = q->fields[i];
143 (*action)(argcount, argv, actarg);
146 int qcmp(const void *q1, const void *q2)
148 return strcmp((*(struct query **)q1)->name, (*(struct query **)q2)->name);