
(******************************************************
*
*		POINTERS
*
*	This program will input a list of names, store
*	them in a linked list, output the list, release
*	the storage and end.  It is a demo program but
*	can be expanded to just about anything.
*
*	Extracted from the Pascal/Z manual, page 49.
*
*	Editor for this program was Charlie Foster
*	June 1980
*******************************************************)

PROGRAM pointers;

TYPE    link    = ^namerec;
	namerec = RECORD
			name : string 20;
			next : link
			END;

VAR	m1    : link;	{ FOR STORING THE MARK }
	first : link;	{ FOR FINDING THE FIRST NAME }
	last  : link;	{ FOR FINDING THE LAST NAME }
	x     : link;	{ FOR CHASING THROUGH THE LIST }

BEGIN
	MARK(m1);	{ MARK SETS POINTER TO TOP/HEAP }
	first := nil;	{ 1st NAME POINTER=0 }
	REPEAT
		IF first = nil THEN
		   BEGIN
			NEW(last);	{ ALLOCATE A NEW REC }
			first := last
		   END
		ELSE
		   BEGIN
			NEW(last^.next);
			last := last^.next
		   END;
		WRITE('Name (* = Done )');
		READLN(last^.name);	{ GET PERSONS NAME }
		last^.next := nil
	UNTIL last^.name ='*';
{ PRINT OUT THE NAMES }
	x := first;
	WHILE x^.next <> nil DO
	   BEGIN
		WRITELN(x^.name);
		x := x^.next
	   END;
{ RESTORE THE STORAGE }
	RELEASE(m1);
END.

