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