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