Bei Arrays ist es ganz einfach Werte zu ändern.
Aber erstmal ein Beispiel um mehrere Werte von einer Procedure zurückzubekommen. Sinnlos, aber sicherlich nützlich. (Hmmm, unlogischer Satz)
Code: Alles auswählen
Structure IR_Ex
Text.s
Length.l
Ok.l
EndStructure
Procedure InputRequester_Ex(Title.s, Message.s, DefaultString.s, *Out.IR_Ex)
Protected Result.s
Result.s = InputRequester(Title, Message, DefaultString)
If *Out
*Out\Text = Result
*Out\Length = Len(Result)
If *Out\Length
*Out\Ok = #True
Else
*Out\Ok = #False
EndIf
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
InputRequester_Ex("Hallo", "Gib was ein.", "(da steht nix)", @Result.IR_Ex)
If Result\Ok
MessageRequester("Hallo", "Es wurde folgender Text eingegeben:" + #LFCR$ + Result\Text + #LFCR$ + "Er hat die Länge " + Str(Result\Length) + " Bytes.")
Else
MessageRequester("Hallo", "Es wurde nichts eingegeben")
EndIf
Und hier nun das Beispiel für Arrays:
Code: Alles auswählen
#Entries = 10
Structure TestStruc
Long.l
String.s
Float.f
EndStructure
Dim Array.TestStruc(#Entries - 1)
Procedure ReadArray(*Array.TestStruc, Entries.l)
While *Array And Entries
Debug *Array\Long
Debug *Array\String
Debug *Array\Float
Entries - 1
*Array + SizeOf(TestStruc)
Wend
EndProcedure
Procedure WriteArray(*Array.TestStruc, Entries.l)
Protected a.l
While *Array And Entries
a + 1
*Array\Long = a
*Array\String = "Value: " + Str(a)
*Array\Float = 1 / a
*Array + SizeOf(TestStruc)
Entries - 1
Wend
EndProcedure
WriteArray(@Array(), #Entries)
ReadArray(@Array(), #Entries)
Bei LinkedLists ist es problematisch, da du hier nur auslesen und ändern kannst, aber keine Elemente hinzufügen oder löschen kannst. Das geht höchstens bedingt. Aber diese Bedingung will ich hier erstmal nicht aufführen. Du kannst dir auch mal anschauen, was ich dir mit der Konstanten [c]#Modus[/c] sagen will.
Code: Alles auswählen
#Entries = 10
Structure TestStruc
Long.l
String.s
Float.f
EndStructure
NewList LL.TestStruc()
For a.l = 1 To #Entries
If AddElement(LL())
LL()\Long = a
LL()\String = "Value: " + Str(a)
LL()\Float = 1 / a
EndIf
Next
Procedure ReadLinkedList(*FirstElement.TestStruc)
While *FirstElement <> 8
Debug *FirstElement\Long
Debug *FirstElement\String
Debug *FirstElement\Float
*FirstElement = PeekL(*FirstElement - 8) + 8
Wend
EndProcedure
Procedure ChangeLinkedList(*FirstElement.TestStruc)
While *FirstElement <> 8
*FirstElement\Long * 100
*FirstElement\String = "Value: " + Str(a)
*FirstElement\Float = 1 / *FirstElement\Long
*FirstElement = PeekL(*FirstElement - 8) + 8
Wend
EndProcedure
#Modus = 0
If #Modus
ReadLinkedList(FirstElement(LL()) + 8)
Else
FirstElement(LL())
ReadLinkedList(@LL())
EndIf
If #Modus
ChangeLinkedList(FirstElement(LL()) + 8)
Else
FirstElement(LL())
ChangeLinkedList(@LL())
EndIf
Debug "----------------------------------------"
If #Modus
ReadLinkedList(FirstElement(LL()) + 8)
Else
FirstElement(LL())
ReadLinkedList(@LL())
EndIf
Viel Spaß!
