Basic Univers
Structure MaStructure
  Champ1.f
  Champ2.s
EndStructure

; PureBasic ajoute lui-même le Next et le Previous
NewList Maliste.MaStructure() ; Déclare une liste chainée



Declare TestList(*ptr)

; Ensuite tu peux ajouter un élément à la liste
AddElement(Maliste())
; mémorise le point de la liste créée
*liste = @Maliste()
Maliste()\Champ1 = 34.23
Maliste()\Champ2 = "Salut"
; Ajoute un autre élément
*pointeur.MaStructure  = AddElement(Maliste())
Maliste()\Champ1 = 87.81
Maliste()\Champ2 = "au revoir"


TestList(*liste)

; partie de manipulation des pointeurs

*pointeur = PeekL(*pointeur + 4) ; recupère le pointeur vers la précédente structure
Debug PeekF(*pointeur + 8) ; affiche la première donné
; si on veut passer par les champ, faut ajouter au pointeur les
; 2x4 octets des deux Next/Previous ajouté par PB dans ta structure
*champ.MaStructure = *pointeur + 8
Debug *champ\Champ1 ; et on peut lire les champs
Debug *champ\Champ2
Debug "============"



; meme principe pour le suivant
*pointeur = PeekL(*pointeur) ; récupère le suivant cette fois
Debug PeekF(*pointeur + 8)  ; affiche la première donné
*champ.MaStructure = *pointeur + 8
Debug *champ\Champ1 ; et on peut lire les champs
Debug *champ\Champ2
Debug "============"



; tu peux visualiser le contenu de ta liste
  Debug "***********"
ForEach Maliste()
  Debug Maliste()\Champ1
  Debug Maliste()\Champ2
  Debug "***********"
Next



; procedure quelconque
Procedure TestList(*ptr)
  Protected NewList Uneliste.MaStructure()

  ChangeCurrentElement(Uneliste(), *ptr)
 
  AddElement(UneListe())
  UneListe()\Champ1 = 66.23
  UneListe()\Champ2 = "Trois"
 
 
EndProcedure