]> andersk Git - moira.git/blob - lib/sq.c
missing coma in last change, causes compile_et to coredump
[moira.git] / lib / sq.c
1 /* $Header$
2  *
3  * Generic Queue Routines
4  *
5  *  (c) Copyright 1988 by the Massachusetts Institute of Technology.
6  *  For copying and distribution information, please see the file
7  *  <mit-copyright.h>.
8  */
9
10 #include <mit-copyright.h>
11 #include <moira.h>
12 #include <string.h>
13
14 extern char *malloc();
15
16 struct save_queue *
17 sq_create()
18 {
19     register struct save_queue *sq;
20
21     sq = (struct save_queue *)malloc(sizeof (struct save_queue));
22     sq->q_next = sq;
23     sq->q_prev = sq;
24     sq->q_lastget = 0;
25     return(sq);
26 }
27
28 sq_save_data(sq, data)
29     register struct save_queue *sq;
30     char *data;
31 {
32     register struct save_queue *q;
33
34     q = (struct save_queue *)malloc(sizeof (struct save_queue));
35     q->q_next = sq;
36     q->q_prev = sq->q_prev;
37     sq->q_prev->q_next = q;
38     sq->q_prev = q;
39     q->q_data = data;
40 }
41
42 sq_save_args(argc, argv, sq)
43     register struct save_queue *sq;
44     register int argc;
45     register char *argv[];
46 {
47     register char **argv_copy;
48     register int i;
49     register int n;
50
51     argv_copy = (char **)malloc(argc * sizeof (char *));
52     for (i = 0; i < argc; i++) {
53         n = strlen(argv[i]) + 1;
54         argv_copy[i] = (char *)malloc(n);
55         memcpy(argv_copy[i], argv[i], n);
56     }
57
58     sq_save_data(sq, (char *)argv_copy);
59 }
60
61 sq_save_unique_data(sq, data)
62     register struct save_queue *sq;
63     char *data;
64 {
65     register struct save_queue *q;
66
67     for (q = sq->q_next; q != sq; q = q->q_next)
68         if (q->q_data == data) return;
69
70     sq_save_data(sq, data);
71 }
72
73 sq_save_unique_string(sq, data)
74     register struct save_queue *sq;
75     char *data;
76 {
77     register struct save_queue *q;
78
79     for (q = sq->q_next; q != sq; q = q->q_next)
80         if (!strcmp(q->q_data, data)) return;
81
82     sq_save_data(sq, data);
83 }
84
85 sq_get_data(sq, data)
86     register struct save_queue *sq;
87     register char **data;
88 {
89     if (sq->q_lastget == (struct save_queue *)0) {
90         sq->q_lastget = sq->q_next;
91     } else {
92         sq->q_lastget = sq->q_lastget->q_next;
93     }
94
95     if (sq->q_lastget == sq) return(0);
96     *data = sq->q_lastget->q_data;
97     return(1);
98 }
99
100 sq_remove_data(sq, data)
101     register struct save_queue *sq;
102     register char **data;
103 {
104     if (sq->q_next != sq) {
105         *data = sq->q_next->q_data;
106         sq->q_next = sq->q_next->q_next;
107         free(sq->q_next->q_prev);
108         sq->q_next->q_prev = sq;
109         return(1);
110     }
111     return(0);
112 }
113
114 int sq_empty(sq)
115     register struct save_queue *sq;
116 {
117     if (sq->q_next == sq)
118       return(1);
119     else
120       return(0);
121 }
122
123 sq_destroy(sq)
124     register struct save_queue *sq;
125 {
126     register struct save_queue *q;
127
128     for (q = sq->q_next; q != sq; q = sq->q_next) {
129         sq->q_next = q->q_next;
130         free(q);                        
131     }
132     free(sq);
133 }
134
This page took 0.108017 seconds and 5 git commands to generate.