]> andersk Git - moira.git/blame - lib/sq.c
Initial revision
[moira.git] / lib / sq.c
CommitLineData
1992b825 1/* $Header$
2 *
3 * Generic Queue Routines
4 */
5
6#include "sms_app.h"
7
8struct save_queue *
9sq_create()
10{
11 register struct save_queue *sq;
12
13 sq = (struct save_queue *)malloc(sizeof (struct save_queue));
14 sq->q_next = sq;
15 sq->q_prev = sq;
16 sq->q_lastget = 0;
17 return(sq);
18}
19
20sq_save_data(sq, data)
21 register struct save_queue *sq;
22 char *data;
23{
24 register struct save_queue *q;
25
26 q = (struct save_queue *)malloc(sizeof (struct save_queue));
27 q->q_next = sq;
28 q->q_prev = sq->q_prev;
29 sq->q_prev->q_next = q;
30 sq->q_prev = q;
31 q->q_data = data;
32}
33
34sq_save_args(argc, argv, sq)
35 register struct save_queue *sq;
36 register int argc;
37 register char *argv[];
38{
39 register char **argv_copy;
40 register int i;
41 register int n;
42
43 argv_copy = (char **)malloc(argc * sizeof (char *));
44 for (i = 0; i < argc; i++) {
45 n = strlen(argv[i]) + 1;
46 argv_copy[i] = (char *)malloc(n);
47 bcopy(argv[i], argv_copy[i], n);
48 }
49
50 sq_save_data(sq, argv_copy);
51}
52
53sq_save_unique_data(sq, data)
54 register struct save_queue *sq;
55 char *data;
56{
57 register struct save_queue *q;
58
59 for (q = sq->q_next; q != sq; q = q->q_next)
60 if (q->q_data == data) return;
61
62 sq_save_data(sq, data);
63}
64
65sq_save_unique_string(sq, data)
66 register struct save_queue *sq;
67 char *data;
68{
69 register struct save_queue *q;
70
71 for (q = sq->q_next; q != sq; q = q->q_next)
72 if (!strcmp(q->q_data, data)) return;
73
74 sq_save_data(sq, data);
75}
76
77sq_get_data(sq, data)
78 register struct save_queue *sq;
79 register char **data;
80{
81 if (sq->q_lastget == (struct save_queue *)0) {
82 sq->q_lastget = sq->q_next;
83 } else {
84 sq->q_lastget = sq->q_lastget->q_next;
85 }
86
87 if (sq->q_lastget == sq) return(0);
88 *data = sq->q_lastget->q_data;
89 return(1);
90}
91
92sq_destroy(sq)
93 register struct save_queue *sq;
94{
95 register struct save_queue *q;
96
97 for (q = sq->q_next; q != sq; q = sq->q_next) {
98 sq->q_next = q->q_next;
99 free(q);
100 }
101 free(sq);
102}
103
This page took 0.057201 seconds and 5 git commands to generate.