]> andersk Git - moira.git/blame - server/qsubs.c
More of Mike's 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
7 *
8 * $Log$
9 * Revision 1.2 1987-06-08 03:08:15 wesommer
10 * Reindented; added header.
11 *
12 */
13
14#ifndef lint
15static char *rcsid_qsubs_c = "$Header$";
16#endif lint
17
97479f6f 18#include "query.h"
19
20extern struct query Queries[];
21extern int QueryCount;
3e10560e 22#ifdef notdef
97479f6f 23extern struct s_query S_Queries[];
24extern int S_QueryCount;
3e10560e 25#endif notdef
97479f6f 26
27struct query *
28get_query_by_name(name)
3e10560e 29 register char *name;
97479f6f 30{
3e10560e 31 register struct query *q;
32 register int i;
33
34 q = Queries;
35 i = QueryCount;
36
37 if (strlen(name) == 4) {
38 while (--i >= 0) {
39 if (!strcmp(q->shortname, name)) return(q);
40 q++;
97479f6f 41 }
3e10560e 42 } else {
43 while (--i >= 0) {
44 if (!strcmp(q->name, name)) return(q);
45 q++;
46 }
47 }
97479f6f 48
3e10560e 49 return((struct query *)0);
97479f6f 50}
51
52get_input_fields(q, argc, argv)
3e10560e 53 register struct query *q;
54 int *argc;
55 char ***argv;
97479f6f 56{
3e10560e 57 *argv = q->fields;
58 *argc = q->sargc + q->argc;
59 if (q->type == UPDATE || q->type == APPEND)
60 *argc += q->vcnt;
97479f6f 61}
62
63get_output_fields(q, argc, argv)
3e10560e 64 register struct query *q;
65 int *argc;
66 char ***argv;
97479f6f 67{
3e10560e 68 if (q->type == RETRIEVE) {
69 *argc = q->vcnt;
70 *argv = &q->fields[q->sargc + q->argc];
71 } else {
72 *argc = 0;
73 *argv = (char **)0;
74 }
97479f6f 75}
76
77char *
78get_field(q, argv, name)
3e10560e 79 register struct query *q;
80 char *argv[];
81 char *name;
97479f6f 82{
3e10560e 83 register char **fp;
84 register char *field;
85 register int i;
86
87 if (q->type != RETRIEVE) return((char *)0);
88
89 if (*name == '*') name++;
90 fp = &q->fields[q->sargc + q->argc];
91 for (i = 0; i < q->vcnt; i++) {
92 field = *fp++;
93 if (*field == '*') field++;
94 if (!strcmp(field, name)) return(argv[i]);
95 }
96 return((char *)0);
97479f6f 97}
98
99put_field(q, argv, name, value)
3e10560e 100 register struct query *q;
101 char *argv[];
102 char *name;
103 char *value;
97479f6f 104{
3e10560e 105 register char **fp;
106 register char *field;
107 register int i;
108 register int n;
109
110 n = q->sargc + q->argc;
111 if (q->type == UPDATE || q->type == APPEND) n += q->vcnt;
112
113 if (*name == '*') name++;
114 fp = q->fields;
115 for (i = 0; i < n; i++) {
116 field = *fp++;
117 if (*field == '*') field++;
118 if (!strcmp(field, name)) {
119 strcpy(argv[i], value);
120 return(0);
97479f6f 121 }
3e10560e 122 }
123 return(-1);
97479f6f 124}
125
126
127/* Generic Queue Routines */
128
129struct save_queue *
130sq_create()
131{
3e10560e 132 register struct save_queue *sq;
97479f6f 133
3e10560e 134 sq = (struct save_queue *)malloc(sizeof (struct save_queue));
135 sq->q_next = sq;
136 sq->q_prev = sq;
137 sq->q_lastget = 0;
138 return(sq);
97479f6f 139}
140
141sq_save_data(sq, data)
3e10560e 142 register struct save_queue *sq;
143 char *data;
97479f6f 144{
3e10560e 145 register struct save_queue *q;
146
147 q = (struct save_queue *)malloc(sizeof (struct save_queue));
148 q->q_next = sq;
149 q->q_prev = sq->q_prev;
150 sq->q_prev->q_next = q;
151 sq->q_prev = q;
152 q->q_data = data;
97479f6f 153}
154
155sq_get_data(sq, data)
3e10560e 156 register struct save_queue *sq;
157 register char **data;
97479f6f 158{
3e10560e 159 if (sq->q_lastget == (struct save_queue *)0) {
160 sq->q_lastget = sq->q_next;
161 } else {
162 sq->q_lastget = sq->q_lastget->q_next;
163 }
164
165 if (sq->q_lastget == sq) return(0);
166 *data = sq->q_lastget->q_data;
167 return(1);
97479f6f 168}
169
170sq_destroy(sq)
3e10560e 171 register struct save_queue *sq;
97479f6f 172{
3e10560e 173 register struct save_queue *q;
97479f6f 174
3e10560e 175 for (q = sq->q_next; q != sq; q = sq->q_next) {
176 sq->q_next = q->q_next;
177 free(q);
178 }
179 free(sq);
97479f6f 180}
3e10560e 181
182
183/*
184 * Local Variables:
185 * mode: c
186 * c-indent-level: 4
187 * c-continued-statement-offset: 4
188 * c-brace-offset: -4
189 * c-argdecl-indent: 4
190 * c-label-offset: -4
191 * End:
192 */
This page took 0.097403 seconds and 5 git commands to generate.