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>
13 extern char *malloc();
18 register struct save_queue *sq;
20 sq = (struct save_queue *)malloc(sizeof (struct save_queue));
27 sq_save_data(sq, data)
28 register struct save_queue *sq;
31 register struct save_queue *q;
33 q = (struct save_queue *)malloc(sizeof (struct save_queue));
35 q->q_prev = sq->q_prev;
36 sq->q_prev->q_next = q;
41 sq_save_args(argc, argv, sq)
42 register struct save_queue *sq;
44 register char *argv[];
46 register char **argv_copy;
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);
57 sq_save_data(sq, (char *)argv_copy);
60 sq_save_unique_data(sq, data)
61 register struct save_queue *sq;
64 register struct save_queue *q;
66 for (q = sq->q_next; q != sq; q = q->q_next)
67 if (q->q_data == data) return;
69 sq_save_data(sq, data);
72 sq_save_unique_string(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 (!strcmp(q->q_data, data)) return;
81 sq_save_data(sq, data);
85 register struct save_queue *sq;
88 if (sq->q_lastget == (struct save_queue *)0) {
89 sq->q_lastget = sq->q_next;
91 sq->q_lastget = sq->q_lastget->q_next;
94 if (sq->q_lastget == sq) return(0);
95 *data = sq->q_lastget->q_data;
99 sq_remove_data(sq, data)
100 register struct save_queue *sq;
101 register char **data;
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;
114 register struct save_queue *sq;
116 if (sq->q_next == sq)
123 register struct save_queue *sq;
125 register struct save_queue *q;
127 for (q = sq->q_next; q != sq; q = sq->q_next) {
128 sq->q_next = q->q_next;