82 lines
1.1 KiB
Text
82 lines
1.1 KiB
Text
CARD EndProg ;required for ALLOCATE.ACT
|
|
|
|
INCLUDE "D2:ALLOCATE.ACT" ;from the Action! Tool Kit. You must type 'SET EndProg=*' from the monitor after compiling, but before running this program!
|
|
|
|
DEFINE PTR="CARD"
|
|
DEFINE NODE_SIZE="4"
|
|
TYPE ListNode=[INT data PTR nxt]
|
|
|
|
ListNode POINTER listBegin
|
|
|
|
PTR FUNC FindLast()
|
|
ListNode POINTER last
|
|
|
|
last=listBegin
|
|
IF last=0 THEN
|
|
RETURN (0)
|
|
FI
|
|
WHILE last.nxt#0
|
|
DO
|
|
last=last.nxt
|
|
OD
|
|
RETURN (last)
|
|
|
|
PROC Append(INT v)
|
|
ListNode POINTER n,last
|
|
|
|
n=Alloc(NODE_SIZE)
|
|
n.data=v
|
|
n.nxt=0
|
|
last=FindLast()
|
|
IF last THEN
|
|
last.nxt=n
|
|
ELSE
|
|
listBegin=n
|
|
FI
|
|
RETURN
|
|
|
|
PROC Clear()
|
|
ListNode POINTER n,next
|
|
|
|
n=listBegin
|
|
WHILE n
|
|
DO
|
|
next=n.nxt
|
|
Free(n,NODE_SIZE)
|
|
n=next
|
|
OD
|
|
listBegin=0
|
|
RETURN
|
|
|
|
PROC Traverse()
|
|
ListNode POINTER n
|
|
|
|
n=listBegin
|
|
PrintE("Traverse:")
|
|
Print("(")
|
|
WHILE n
|
|
DO
|
|
PrintI(n.data)
|
|
IF n.nxt THEN
|
|
Print(", ")
|
|
FI
|
|
n=n.nxt
|
|
OD
|
|
PrintE(")")
|
|
RETURN
|
|
|
|
PROC Main()
|
|
INT i
|
|
Put(125) PutE() ;clear screen
|
|
|
|
AllocInit(0)
|
|
listBegin=0
|
|
|
|
FOR i=0 TO 50
|
|
DO
|
|
Append(i*i)
|
|
OD
|
|
Traverse()
|
|
|
|
Clear()
|
|
RETURN
|