Code: Select all
Structure ListAdd
*Next.ListAdd
*Previous.ListAdd
EndStructure
Procedure ListAdd(*Where.ListAdd, Position, SizeOf)
;/ Position 0 = Before
;/ Position 1 = After
*New.ListAdd=AllocateMemory(SizeOf)
If Not Position
;/ Before
If *Where\Previous
*Where\Previous\Next=*New
*New\Previous=*Where\Previous
*Where\Previous=*New
*New\Next=*Where
Else
*Where\Previous=*New
*New\Next=*Where
EndIf
Else
;/ After
If *Where\Next
*Where\Next\Previous=*New
*New\Next=*Where\Next
*Where\Next=*New
*New\Previous=*Where
Else
*Where\Next=*New
*New\Previous=*Where
EndIf
EndIf
ProcedureReturn *New
EndProcedure
Structure That
*Next
*Previous
ID.l
EndStructure
*This.That=AllocateMemory(SizeOf(That))
*This\ID=1
*n.That=*This
*This=ListAdd(*This,1,SizeOf(That))
*This\ID=2
*This=ListAdd(*This,1,SizeOf(That))
*This\ID=3
*This=ListAdd(*This,1,SizeOf(That))
*This\ID=4
Debug *n\ID
Repeat
*n=*n\Next
Debug *n\ID
Until Not *n\Next
*This.That=AllocateMemory(SizeOf(That))
*This\ID=4
*n.That=*This
*This=ListAdd(*This,0,SizeOf(That))
*This\ID=3
*This=ListAdd(*This,0,SizeOf(That))
*This\ID=2
*This=ListAdd(*This,0,SizeOf(That))
*This\ID=1
Debug *n\ID
Repeat
*n=*n\Previous
Debug *n\ID
Until Not *n\Previous