6 * Copyright (C) 1987 by the Massachusetts Institute of Technology
7 * For copying and distribution information, please see the file
13 static char *rcsid_qsubs_c = "$Header$";
16 #include <mit-copyright.h>
18 #include "mr_server.h"
21 extern struct query Queries2[];
22 extern int QueryCount2;
24 struct query *get_query_by_name(register char *name, int version)
26 register struct query *q;
32 if (strlen(name) == 4)
36 if (!strcmp(q->shortname, name))
45 if (!strcmp(q->name, name))
54 void list_queries(int version, int (*action)(), char *actarg)
56 register struct query *q;
58 static struct query **squeries2 = NULL;
59 register struct query **sq;
68 sq = malloc(count * sizeof(struct query *));
71 for (i = count; --i >= 0; )
73 qsort(squeries2, count, sizeof(struct query *), qcmp);
78 for (i = count; --i >= 0; sq++)
80 sprintf(qnames, "%s (%s)", (*sq)->name, (*sq)->shortname);
81 (*action)(1, &qnp, actarg);
83 strcpy(qnames, "_help");
84 (*action)(1, &qnp, actarg);
85 strcpy(qnames, "_list_queries");
86 (*action)(1, &qnp, actarg);
87 strcpy(qnames, "_list_users");
88 (*action)(1, &qnp, actarg);
91 void help_query(register struct query *q, int (*action)(), char *actarg)
93 register int argcount;
101 if (q->type == UPDATE || q->type == APPEND)
107 sprintf(qname, " %s, %s ()", q->name, q->shortname);
113 sprintf(qname, " %s, %s (%s)", q->name, q->shortname, q->fields[0]);
119 sprintf(qname, " %s, %s (%s, %s)", q->name, q->shortname,
120 q->fields[0], q->fields[1]);
126 sprintf(qname, " %s, %s (%s", q->name, q->shortname, q->fields[0]);
129 for (i = 1; i < argcount; i++)
130 argv[i] = q->fields[i];
131 sprintf(argn, "%s)", q->fields[argcount]);
132 argv[argcount++] = argn;
136 if (q->type == RETRIEVE)
138 sprintf(argr, "%s => %s", argv[--argcount], q->fields[q->argc]);
139 argv[argcount++] = argr;
142 for (i = q->argc + 1; i < q->vcnt + q->argc; i++)
143 argv[argcount++] = q->fields[i];
146 (*action)(argcount, argv, actarg);
149 int qcmp(struct query **q1, struct query **q2)
151 return strcmp((*q1)->name, (*q2)->name);