]> andersk Git - moira.git/blame - server/qsubs.c
Code style cleanup. (No functional changes)
[moira.git] / server / qsubs.c
CommitLineData
3e10560e 1/*
2 * $Source$
3 * $Author$
4 * $Header$
5 *
6 * Copyright (C) 1987 by the Massachusetts Institute of Technology
c801de4c 7 * For copying and distribution information, please see the file
8 * <mit-copyright.h>.
3e10560e 9 *
3e10560e 10 */
11
12#ifndef lint
13static char *rcsid_qsubs_c = "$Header$";
14#endif lint
15
c801de4c 16#include <mit-copyright.h>
d548a4e7 17#include <moira.h>
03c05291 18#include "mr_server.h"
97479f6f 19#include "query.h"
20
c5a0c32c 21extern struct query Queries2[];
22extern int QueryCount2;
97479f6f 23
5eaef520 24struct query *get_query_by_name(register char *name, int version)
97479f6f 25{
5eaef520 26 register struct query *q;
27 register int i;
28
29 q = Queries2;
30 i = QueryCount2;
31
32 if (strlen(name) == 4)
33 {
34 while (--i >= 0)
35 {
36 if (!strcmp(q->shortname, name))
37 return q;
38 q++;
97479f6f 39 }
5eaef520 40 }
41 else
42 {
43 while (--i >= 0)
44 {
45 if (!strcmp(q->name, name))
46 return q;
47 q++;
3e10560e 48 }
49 }
97479f6f 50
5eaef520 51 return NULL;
97479f6f 52}
53
5eaef520 54void list_queries(int version, int (*action)(), char *actarg)
ab70c698 55{
56 register struct query *q;
57 register int i;
5eaef520 58 static struct query **squeries2 = NULL;
ab70c698 59 register struct query **sq;
60 char qnames[80];
61 char *qnp;
c351960a 62 int count;
ab70c698 63 int qcmp();
64
5eaef520 65 count = QueryCount2;
66 if (!squeries2)
67 {
68 sq = malloc(count * sizeof(struct query *));
69 squeries2 = sq;
70 q = Queries2;
71 for (i = count; --i >= 0; )
72 *sq++ = q++;
73 qsort(squeries2, count, sizeof(struct query *), qcmp);
74 }
75 sq = squeries2;
ab70c698 76
77 qnp = qnames;
5eaef520 78 for (i = count; --i >= 0; sq++)
79 {
ab70c698 80 sprintf(qnames, "%s (%s)", (*sq)->name, (*sq)->shortname);
81 (*action)(1, &qnp, actarg);
5eaef520 82 }
c351960a 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);
ab70c698 89}
90
5eaef520 91void help_query(register struct query *q, int (*action)(), char *actarg)
ab70c698 92{
5eaef520 93 register int argcount;
94 register int i;
95 char argn[32];
96 char qname[512];
97 char argr[512];
98 char *argv[32];
ab70c698 99
5eaef520 100 argcount = q->argc;
101 if (q->type == UPDATE || q->type == APPEND)
102 argcount += q->vcnt;
ab70c698 103
5eaef520 104 switch (argcount)
105 {
ab70c698 106 case 0:
5eaef520 107 sprintf(qname, " %s, %s ()", q->name, q->shortname);
108 argv[0] = qname;
109 argcount = 1;
110 break;
ab70c698 111
112 case 1:
5eaef520 113 sprintf(qname, " %s, %s (%s)", q->name, q->shortname, q->fields[0]);
114 argv[0] = qname;
115 argcount = 1;
116 break;
ab70c698 117
118 case 2:
5eaef520 119 sprintf(qname, " %s, %s (%s, %s)", q->name, q->shortname,
120 q->fields[0], q->fields[1]);
121 argv[0] = qname;
122 argcount = 1;
123 break;
ab70c698 124
125 default:
5eaef520 126 sprintf(qname, " %s, %s (%s", q->name, q->shortname, q->fields[0]);
127 argv[0] = qname;
128 argcount--;
129 for (i = 1; i < argcount; i++)
130 argv[i] = q->fields[i];
131 sprintf(argn, "%s)", q->fields[argcount]);
132 argv[argcount++] = argn;
133 break;
ab70c698 134 }
5eaef520 135
136 if (q->type == RETRIEVE)
137 {
138 sprintf(argr, "%s => %s", argv[--argcount], q->fields[q->argc]);
139 argv[argcount++] = argr;
140 if (q->vcnt > 1)
141 {
142 for (i = q->argc + 1; i < q->vcnt + q->argc; i++)
143 argv[argcount++] = q->fields[i];
144 }
c351960a 145 }
5eaef520 146 (*action)(argcount, argv, actarg);
ab70c698 147}
148
5eaef520 149int qcmp(struct query **q1, struct query **q2)
ab70c698 150{
5eaef520 151 return strcmp((*q1)->name, (*q2)->name);
ab70c698 152}
This page took 0.998866 seconds and 5 git commands to generate.