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>
16 register struct save_queue *sq;
18 sq = (struct save_queue *)malloc(sizeof (struct save_queue));
25 sq_save_data(sq, data)
26 register struct save_queue *sq;
29 register struct save_queue *q;
31 q = (struct save_queue *)malloc(sizeof (struct save_queue));
33 q->q_prev = sq->q_prev;
34 sq->q_prev->q_next = q;
39 sq_save_args(argc, argv, sq)
40 register struct save_queue *sq;
42 register char *argv[];
44 register char **argv_copy;
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);
55 sq_save_data(sq, argv_copy);
58 sq_save_unique_data(sq, data)
59 register struct save_queue *sq;
62 register struct save_queue *q;
64 for (q = sq->q_next; q != sq; q = q->q_next)
65 if (q->q_data == data) return;
67 sq_save_data(sq, data);
70 sq_save_unique_string(sq, data)
71 register struct save_queue *sq;
74 register struct save_queue *q;
76 for (q = sq->q_next; q != sq; q = q->q_next)
77 if (!strcmp(q->q_data, data)) return;
79 sq_save_data(sq, data);
83 register struct save_queue *sq;
86 if (sq->q_lastget == (struct save_queue *)0) {
87 sq->q_lastget = sq->q_next;
89 sq->q_lastget = sq->q_lastget->q_next;
92 if (sq->q_lastget == sq) return(0);
93 *data = sq->q_lastget->q_data;
98 register struct save_queue *sq;
100 register struct save_queue *q;
102 for (q = sq->q_next; q != sq; q = sq->q_next) {
103 sq->q_next = q->q_next;