]> andersk Git - moira.git/blob - lib/sq.c
remove dependancy on resolver internals
[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
13 extern char *malloc();
14
15 struct save_queue *
16 sq_create()
17 {
18     register struct save_queue *sq;
19
20     sq = (struct save_queue *)malloc(sizeof (struct save_queue));
21     sq->q_next = sq;
22     sq->q_prev = sq;
23     sq->q_lastget = 0;
24     return(sq);
25 }
26
27 sq_save_data(sq, data)
28     register struct save_queue *sq;
29     char *data;
30 {
31     register struct save_queue *q;
32
33     q = (struct save_queue *)malloc(sizeof (struct save_queue));
34     q->q_next = sq;
35     q->q_prev = sq->q_prev;
36     sq->q_prev->q_next = q;
37     sq->q_prev = q;
38     q->q_data = data;
39 }
40
41 sq_save_args(argc, argv, sq)
42     register struct save_queue *sq;
43     register int argc;
44     register char *argv[];
45 {
46     register char **argv_copy;
47     register int i;
48     register int n;
49
50     argv_copy = (char **)malloc(argc * sizeof (char *));
51     for (i = 0; i < argc; i++) {
52         n = strlen(argv[i]) + 1;
53         argv_copy[i] = (char *)malloc(n);
54         bcopy(argv[i], argv_copy[i], n);
55     }
56
57     sq_save_data(sq, (char *)argv_copy);
58 }
59
60 sq_save_unique_data(sq, data)
61     register struct save_queue *sq;
62     char *data;
63 {
64     register struct save_queue *q;
65
66     for (q = sq->q_next; q != sq; q = q->q_next)
67         if (q->q_data == data) return;
68
69     sq_save_data(sq, data);
70 }
71
72 sq_save_unique_string(sq, data)
73     register struct save_queue *sq;
74     char *data;
75 {
76     register struct save_queue *q;
77
78     for (q = sq->q_next; q != sq; q = q->q_next)
79         if (!strcmp(q->q_data, data)) return;
80
81     sq_save_data(sq, data);
82 }
83
84 sq_get_data(sq, data)
85     register struct save_queue *sq;
86     register char **data;
87 {
88     if (sq->q_lastget == (struct save_queue *)0) {
89         sq->q_lastget = sq->q_next;
90     } else {
91         sq->q_lastget = sq->q_lastget->q_next;
92     }
93
94     if (sq->q_lastget == sq) return(0);
95     *data = sq->q_lastget->q_data;
96     return(1);
97 }
98
99 sq_remove_data(sq, data)
100     register struct save_queue *sq;
101     register char **data;
102 {
103     if (sq->q_next != sq) {
104         *data = sq->q_next->q_data;
105         sq->q_next = sq->q_next->q_next;
106         free(sq->q_next->q_prev);
107         sq->q_next->q_prev = sq;
108         return(1);
109     }
110     return(0);
111 }
112
113 int sq_empty(sq)
114     register struct save_queue *sq;
115 {
116     if (sq->q_next == sq)
117       return(1);
118     else
119       return(0);
120 }
121
122 sq_destroy(sq)
123     register struct save_queue *sq;
124 {
125     register struct save_queue *q;
126
127     for (q = sq->q_next; q != sq; q = sq->q_next) {
128         sq->q_next = q->q_next;
129         free(q);                        
130     }
131     free(sq);
132 }
133
This page took 0.058456 seconds and 5 git commands to generate.