]> andersk Git - moira.git/blame_incremental - server/qsubs.c
Added sms_access, now paiys attention to return code from
[moira.git] / server / qsubs.c
... / ...
CommitLineData
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
18#include "query.h"
19
20extern struct query Queries[];
21extern int QueryCount;
22#ifdef notdef
23extern struct s_query S_Queries[];
24extern int S_QueryCount;
25#endif notdef
26
27struct query *
28get_query_by_name(name)
29 register char *name;
30{
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++;
41 }
42 } else {
43 while (--i >= 0) {
44 if (!strcmp(q->name, name)) return(q);
45 q++;
46 }
47 }
48
49 return((struct query *)0);
50}
51
52get_input_fields(q, argc, argv)
53 register struct query *q;
54 int *argc;
55 char ***argv;
56{
57 *argv = q->fields;
58 *argc = q->sargc + q->argc;
59 if (q->type == UPDATE || q->type == APPEND)
60 *argc += q->vcnt;
61}
62
63get_output_fields(q, argc, argv)
64 register struct query *q;
65 int *argc;
66 char ***argv;
67{
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 }
75}
76
77char *
78get_field(q, argv, name)
79 register struct query *q;
80 char *argv[];
81 char *name;
82{
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);
97}
98
99put_field(q, argv, name, value)
100 register struct query *q;
101 char *argv[];
102 char *name;
103 char *value;
104{
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);
121 }
122 }
123 return(-1);
124}
125
126
127/* Generic Queue Routines */
128
129struct save_queue *
130sq_create()
131{
132 register struct save_queue *sq;
133
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);
139}
140
141sq_save_data(sq, data)
142 register struct save_queue *sq;
143 char *data;
144{
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;
153}
154
155sq_get_data(sq, data)
156 register struct save_queue *sq;
157 register char **data;
158{
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);
168}
169
170sq_destroy(sq)
171 register struct save_queue *sq;
172{
173 register struct save_queue *q;
174
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);
180}
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.063469 seconds and 5 git commands to generate.