]> andersk Git - moira.git/blob - server/qsubs.c
Reindented; added header.
[moira.git] / server / qsubs.c
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
15 static char *rcsid_qsubs_c = "$Header$";
16 #endif lint
17
18 #include "query.h"
19
20 extern struct query Queries[];
21 extern int QueryCount;
22 #ifdef notdef
23 extern struct s_query S_Queries[];
24 extern int S_QueryCount;
25 #endif notdef
26
27 struct query *
28 get_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
52 get_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
63 get_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
77 char *
78 get_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
99 put_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
129 struct save_queue *
130 sq_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
141 sq_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
155 sq_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
170 sq_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.179419 seconds and 5 git commands to generate.