|
|
researchv10 Norman
/*
* queues.c 1.4
*
* Queue Handling Functions for Spreadsheet Program `vis'
*
* A. F. Gettier
* Bell Laboratories
* Update made 11/1/82 11:13:33
* Retrieved 11/15/82 13:22:42
*/
#include "vis.h"
#include <stdio.h>
/*LINTLIBRARY*/
/*
* Add to the end of a queue
*/
void qadd( hdr, val )
struct qheader *hdr;
struct node *val;
{
struct qentry *t, *a, *b;
struct node *x;
t = NODE( qentry );
t->next = 0;
t->nodeptr = val;
a = hdr->first;
b = 0;
if ( a == 0 ) {
hdr->first = hdr->last = t;
return;
}
loop {
x = a->nodeptr;
/*
* don't enter if present
*/
if ( (val->row == x->row && val->col < x->col )
|| val->row < x->row ) {
b = a;
a = a->next;
if ( a == 0 ) {
b->next = hdr->last = t;
return;
}
}
else {
if (val->row == x->row && val->col == x->col )
return;
if ( b == 0 ) {
t->next = hdr->first;
hdr->first = t;
}
else {
t->next = b->next;
b->next = t;
}
return;
}
}
}
/*
* Read from the front of a queue
*/
struct node *qread( hdr )
struct qheader *hdr;
{
struct node *t;
struct qentry *s;
if ( hdr->first == 0 ) return( 0 );
t = (hdr->first)->nodeptr;
s = (hdr->first)->next;
free( (char *)hdr->first );
hdr->first = s;
if ( s == 0 ) hdr->last = 0;
return( t );
}
/*
* Empty a queue
*/
void qempty( hdr )
struct qheader *hdr;
{
struct qentry *t;
while ( hdr->first != 0 ) {
t = hdr->first;
free( (char *)hdr->first );
hdr->first = t;
}
hdr->last = 0;
}
/*
* Initialize a queue
*/
void qinit( hdr )
struct qheader *hdr;
{
hdr->first = 0;
hdr->last = 0;
}
/*
* Copy a Queue
*/
struct qheader *qcopy( hdr )
struct qheader *hdr;
{
struct qheader *t;
struct qentry *s, *s1;
t = NODE( qheader );
t->first = 0;
t->last = 0;
s1 = hdr->first;
while( s1 != 0 ) {
s = NODE( qentry );
if ( t->first == 0 )
t->first = s;
else
(t->last)->next = s;
t->last = s;
s->next = 0;
s->nodeptr = s1->nodeptr;
s1 = s1->next;
}
return( t );
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.