3 * Generic Queue Routines
11 register struct save_queue *sq;
13 sq = (struct save_queue *)malloc(sizeof (struct save_queue));
20 sq_save_data(sq, data)
21 register struct save_queue *sq;
24 register struct save_queue *q;
26 q = (struct save_queue *)malloc(sizeof (struct save_queue));
28 q->q_prev = sq->q_prev;
29 sq->q_prev->q_next = q;
34 sq_save_args(argc, argv, sq)
35 register struct save_queue *sq;
37 register char *argv[];
39 register char **argv_copy;
43 argv_copy = (char **)malloc(argc * sizeof (char *));
44 for (i = 0; i < argc; i++) {
45 n = strlen(argv[i]) + 1;
46 argv_copy[i] = (char *)malloc(n);
47 bcopy(argv[i], argv_copy[i], n);
50 sq_save_data(sq, argv_copy);
53 sq_save_unique_data(sq, data)
54 register struct save_queue *sq;
57 register struct save_queue *q;
59 for (q = sq->q_next; q != sq; q = q->q_next)
60 if (q->q_data == data) return;
62 sq_save_data(sq, data);
65 sq_save_unique_string(sq, data)
66 register struct save_queue *sq;
69 register struct save_queue *q;
71 for (q = sq->q_next; q != sq; q = q->q_next)
72 if (!strcmp(q->q_data, data)) return;
74 sq_save_data(sq, data);
78 register struct save_queue *sq;
81 if (sq->q_lastget == (struct save_queue *)0) {
82 sq->q_lastget = sq->q_next;
84 sq->q_lastget = sq->q_lastget->q_next;
87 if (sq->q_lastget == sq) return(0);
88 *data = sq->q_lastget->q_data;
93 register struct save_queue *sq;
95 register struct save_queue *q;
97 for (q = sq->q_next; q != sq; q = sq->q_next) {
98 sq->q_next = q->q_next;