(******************************************************
*
* 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.