61 lines
1.3 KiB
Plaintext
61 lines
1.3 KiB
Plaintext
REM integer history variable
|
|
|
|
Type HistoryInt
|
|
As Integer Ptr values
|
|
As Integer cnt
|
|
As Integer capacity
|
|
End Type
|
|
|
|
Function InitHistory() As HistoryInt Ptr
|
|
Dim As HistoryInt Ptr hist = Allocate(Sizeof(HistoryInt))
|
|
hist->capacity = 10
|
|
hist->values = Allocate(hist->capacity * Sizeof(Integer))
|
|
hist->cnt = 0
|
|
Return hist
|
|
End Function
|
|
|
|
Sub SetInt(hist As HistoryInt Ptr, value As Integer)
|
|
If hist->cnt >= hist->capacity Then
|
|
hist->capacity *= 2
|
|
hist->values = Reallocate(hist->values, hist->capacity * Sizeof(Integer))
|
|
End If
|
|
|
|
If hist->cnt = 0 Then
|
|
hist->values[hist->cnt] = 0
|
|
hist->cnt += 1
|
|
End If
|
|
|
|
hist->values[hist->cnt] = value
|
|
hist->cnt += 1
|
|
End Sub
|
|
|
|
Sub ShowHistory(hist As HistoryInt Ptr)
|
|
For i As Integer = 0 To hist->cnt - 1
|
|
Print hist->values[i]
|
|
Next
|
|
End Sub
|
|
|
|
Function UndoInt(hist As HistoryInt Ptr) As Integer
|
|
If hist->cnt <= 1 Then Return hist->values[0]
|
|
hist->cnt -= 1
|
|
Return hist->values[hist->cnt - 1]
|
|
End Function
|
|
|
|
' Main program
|
|
Randomize Timer
|
|
Dim As HistoryInt Ptr x = InitHistory()
|
|
|
|
For i As Integer = 0 To 3
|
|
SetInt(x, Int(Rnd * 50) + 100)
|
|
Next
|
|
|
|
Print "x history:"
|
|
ShowHistory(x)
|
|
Print
|
|
|
|
For i As Integer = 0 To 3
|
|
Print "undo, x ="; UndoInt(x)
|
|
Next
|
|
|
|
Sleep
|