3 * Generic Queue Routines
5 * (c) Copyright 1988 by the Massachusetts Institute of Technology.
6 * For copying and distribution information, please see the file
10 #include <mit-copyright.h>
18 register struct save_queue *sq;
20 sq = (struct save_queue *)malloc(sizeof (struct save_queue));
29 sq_save_data(sq, data)
30 register struct save_queue *sq;
33 register struct save_queue *q;
35 q = (struct save_queue *)malloc(sizeof (struct save_queue));
38 q->q_prev = sq->q_prev;
39 sq->q_prev->q_next = q;
46 sq_save_args(argc, argv, sq)
47 register struct save_queue *sq;
49 register char *argv[];
51 register char **argv_copy;
55 argv_copy = (char **)malloc(argc * sizeof (char *));
56 if (!argv_copy) return 0;
57 for (i = 0; i < argc; i++) {
58 n = strlen(argv[i]) + 1;
59 argv_copy[i] = (char *)malloc(n);
61 for(i--; i>=0; i--) free(argv_copy[i]);
62 free((char **)argv_copy);
65 memcpy(argv_copy[i], argv[i], n);
68 return sq_save_data(sq, (char *)argv_copy);
72 sq_save_unique_data(sq, data)
73 register struct save_queue *sq;
76 register struct save_queue *q;
78 for (q = sq->q_next; q != sq; q = q->q_next)
79 if (q->q_data == data) return 1;
81 return sq_save_data(sq, data);
85 sq_save_unique_string(sq, data)
86 register struct save_queue *sq;
89 register struct save_queue *q;
91 for (q = sq->q_next; q != sq; q = q->q_next)
92 if (!strcmp(q->q_data, data)) return 1;
94 return sq_save_data(sq, data);
99 register struct save_queue *sq;
100 register char **data;
102 if (sq->q_lastget == (struct save_queue *)0) {
103 sq->q_lastget = sq->q_next;
105 sq->q_lastget = sq->q_lastget->q_next;
108 if (sq->q_lastget == sq) return(0);
109 *data = sq->q_lastget->q_data;
114 sq_remove_data(sq, data)
115 register struct save_queue *sq;
116 register char **data;
118 if (sq->q_next != sq) {
119 *data = sq->q_next->q_data;
120 sq->q_next = sq->q_next->q_next;
121 free(sq->q_next->q_prev);
122 sq->q_next->q_prev = sq;
129 register struct save_queue *sq;
131 if (sq->q_next == sq)
138 register struct save_queue *sq;
140 register struct save_queue *q;
142 for (q = sq->q_next; q != sq; q = sq->q_next) {
143 sq->q_next = q->q_next;