Portable ISO Standard Pascal in C, version 3.8
Submitted By:
WEBMASTER
Rating:





(
Rate It)
(*$c+*)
PROGRAM Listtest;
TYPE Ptr_1 = ^Node_1;
Ptr_2 = ^Node_2;
Ptr_3 = ^Node_3;
Node_1 = RECORD
part1 : ARRAY [1:199] OF Integer;
next : ^Node_1
END;
Node_2 = RECORD
part2 : ARRAY [1:34] OF Integer;
next : ^Node_2
END;
Node_3 = RECORD
part3 : ARRAY [1:149] OF Integer;
next : ^Node_3
END;
VAR Holder_1 : Ptr_1;
Holder_2 : Ptr_2;
Holder_3 : Ptr_3;
i : Integer;
Marker : ^Integer;
BEGIN
{ NOTE: UPPERCASE IS NOT NECESSARY; I JUST LIKE TO USE IT. }
{ --------------------------------------------------------- }
{ In this system, NEW() allocates individual Pascal data }
{ nodes, and DISPOSE() releases these nodes. Most Pascal }
{ programs work quite well with a liberal use of NEW() and }
{ an occasional use of DISPOSE(). For programs that consume }
{ and discard large numbers of nodes, MARK(^Integer ) and }
{ RELEASE(^Integer) provide a mechanism for preventing }
{ depletion of the Pascal heap. MARK() saves the heap state }
{ as an Integer pointer BEFORE allocation using NEW() }
{ begins, and RELEASE() restores the heap to that state }
{ AFTER the memory allocated by NEW() is no longer needed. }
{ Note that MARK() and RELEASE() do not have to appear in }
{ the same procedure. All that is needed is for them to have }
{ the same Integer pointer parameter. }
{ ---------------------------------------------------------- }
{ Save the heap address in Marker: }
MARK(Marker);
FOR i := 1 TO 5 DO
BEGIN
NEW(Holder_1);
{ Breaking strings up is not necessary, just illustrated }
{ here as a way of demonstrating the use of common string }
{ suffixes to minimize space used by string constants in }
{ the run-time system. The common string suffixes are }
{ stored by the system only once for each string: }
WRITELN('Allocation of 200',' words, iteration ',i:1,' .');
{ DISPOSE() is used here to return the nodes acquired from }
{ the Pascal heap to the Pascal List of Available Space }
{ (LAVS). This tests the operation of the Pascal heap }
{ administrator, and can be used on other Pascal systems }
{ as a similar test. }
IF i <= 3 THEN DISPOSE(Holder_1)
END;
{ Return all the NEW() nodes to the heap in one operation: }
RELEASE(Marker);
i := 1;
{ Allocate and relaease nodes until a failure occurs. Nodes }
{ will be drawn from both the Pascal heap and the List of }
{ Available Space (LAVS): }
REPEAT
NEW(Holder_3);
WRITELN('Allocation of 150',' words, iteration ',i:1,' .');
NEW(Holder_2);
WRITELN('Allocation of 35', ' words, iteration ',i:1,' .');
DISPOSE(Holder_3);
{ SUCC(i) is the most efficient way to increment i: }
i := SUCC(i)
UNTIL False
END.