#include <stdio.h>
#define TRUE 1
#define FALSE 0
main()
/* Inputs a series of stockrecords,
creates a list of the records, and
prints the contents of each list
record's infofield
*/
{
listpointer stocks,recordpointer,next();
int done;
initialize(&stocks);
recordpointer = stocks;
done = FALSE;
while(!done&&anotherrecord(recordpointer))
{
addrecord(&stocks,recordpointer,&done);
recordpointer = next(recordpointer);
}
recordpointer=stocks;
while(anotherrecord(recordpointer))
{
printrecord(recordpointer);
recordpointer = next(recordpointer);
}
}
initialize(plistname)
/* Allocates storage for the first record
and sets listname to point to it
*/
listpointer *plistname;
{
listpointer avail();
*plistname = avail();
}
addrecord(plistname,recordpointer,pdone)
/* Fills in the current record's data, and allocates
storage for the next record and adds it to the
list. If there is no data for the current record
it sets the link field of the last list record
to null, or the list head to null, and done to
true.
*/
listpointer *plistname,recordpointer;
int *pdone;
{
static listpointer predecessor;
listpointer setnull(),avail(),getnextrecord(),
pointer;
pointer =getnextrecord();
if(pointer != setnull())
{
setinfo(recordpointer,pointer);
setlink(recordpointer,avail());
predecessor = recordpointer;
}
else if(*plistname != recordpointer)
{
setlink(predecessor,setnull());
*pdone = TRUE;
}
else
{
*plistname = setnull();
*pdone = TRUE;
}