For handling lists of strings I use this method:
First, I create a TList:
Global mylist:TList=New TList
To add strings to the list:
mylist.AddLast "Apple"
mylist.AddLast "Banana"
mylist.AddLast "Pear"
etc..
Now I create a TLink and point it the the FIRST item in my list:
Global link:TLink=mylist.FirstLink()
From here, I can iterate through the list both forwards and backwards. (Note how I wrap around the list if I go past the start/end) ...
FORWARDS:
link=link.NextLink()
If link=Null link=mylist.FirstLink()
BACKWARDS:
link=link.PrevLink()
If link=Null link=mylist.LastLink()
If I want to find out the contents of the item in the list which 'link' is currently pointing at I do this:
text$=String(link.Value())
To insert an entry AFTER the one being pointed to by the TLink:
mylist.InsertAfterLink("Some new fruit",link)To insert an entry BEFORE the one being pointed to by the TLink:
mylist.InsertBeforeLink("Some new fruit",link)Putting it all together:
Strict
' Initialise a TList called mylist
' This is used to hold a list of strings
Global mylist:TList=New TList
' add some items to mylist
mylist.AddLast "Apple"
mylist.AddLast "Banana"
mylist.AddLast "Pear"
mylist.AddLast "Blackberry"
mylist.AddLast "Peach"
mylist.AddLast "Mango"
' Initialise a TLink called link
' Set it to point to the first item in mylist
Global link:TLink=mylist.FirstLink()
' store the string from the first item into selected$
Global selected$=String(link.Value())
' open a small graphic window
AppTitle = "Lists - Next/Previous example"
Graphics 400,300,0,30|SOFTSYNC
SetClsColor $aa,$aa,$aa
Repeat
' if user presses ESCAPE break out of the loop
If KeyHit(KEY_ESCAPE) Exit
' if user presses DOWN ARROW move to next item in list
If KeyHit(KEY_DOWN)
link=link.NextLink()
If link=Null link=mylist.FirstLink()
selected$=String(link.Value())
EndIf
' if user presses UP ARROW move to previous item in list
If KeyHit(KEY_UP)
link=link.PrevLink()
If link=Null link=mylist.LastLink()
selected$=String(link.Value())
EndIf
' If DEL pressed remove selected item
' Now point to the first item in the remaining list
' If the list is empty exit from the loop
If KeyHit(KEY_DELETE)
mylist.Remove selected$
link=mylist.FirstLink()
If link=Null Exit
selected$=String(link.Value())
EndIf
' insert an entry AFTER the currently selected one
If KeyHit(KEY_A)
mylist.InsertAfterLink("Lemon "+Rand(100),link)
EndIf
' insert an entry BEFORE the currently selected one
If KeyHit(KEY_B)
mylist.InsertBeforeLink("Lemon"+Rand(100),link)
EndIf
' if user presses RETURN key show item selected
If KeyHit(KEY_RETURN)
Notify "Your choice is "+selected$
EndIf
' show list and highlight the 'selected' item
Cls
SetColor $88,$44,$00
DrawText "UP/DOWN = select item",10,10
DrawText "RETURN = confirm selection",10,24
DrawText "DEL = Remove selected item",10,38
DrawText "A = Insert 'Lemon' AFTER selected item",10,52
DrawText "B = Insert 'Lemon' BEFORE selected item",10,66
Local y=100
For Local l$=EachIn mylist
SetColor $22,$22,$22
If l$=selected$ SetColor $ff,$ff,$ff
DrawText l$,40,y
y:+16
Next
Flip
FlushMem
Forever
End