I put together a checklist system in an early version of VoiceAttack, though I used a numeric index.
If you're starting from scratch, you'll want to use "Else If", rather than individual compare blocks. That feature simply didn't exist at the time.
Startup Checklist
Say, 'Startup check-list.' (and wait until it completes)
Set small int (condition) [StartupChecklistItem] value to 1
Execute command, 'Set;Check'
Going back to it now, I realise there's no protection against starting another checklist while one is already in progress, so you'll want something like this:
Begin Text Compare : [{EXP:{SMALL:StartupChecklistItem} = 0 And {SMALL:ShutdownChecklistItem} = 0}] Equals '1'
Say, 'Startup check-list.' (and wait until it completes)
Set small int (condition) [StartupChecklistItem] value to 1
Execute command, 'Set;Check'
Else
Say, 'Checklist in progress' (and wait until it completes)
End Condition
Checklist - Startup (Voice Disabled)
Begin Small Integer Compare : [StartupChecklistItem] Equals 1
Say, 'DC Circuit Breakers in'
Set small int (condition) [StartupChecklistItem] value to 2
End Condition - Exit when condition met
Begin Small Integer Compare : [StartupChecklistItem] Equals 2
Say, 'Dome light and position lights as required, anti-collision light on'
Set small int (condition) [StartupChecklistItem] value to 3
End Condition - Exit when condition met
Some scrolling later...
Begin Small Integer Compare : [StartupChecklistItem] Equals 47
Say, 'Startup checklist complete'
Set small int (condition) [StartupChecklistItem] value to 0
End Condition - Exit when condition met
Set;Check
Begin Small Integer Compare : [StartupChecklistItem] Does Not Equal 0
Execute command, 'Checklist - Startup'
End Condition - Exit when condition met
Begin Small Integer Compare : [ShutdownChecklistItem] Does Not Equal 0
Execute command, 'Checklist - Shutdown'
End Condition - Exit when condition met
Say, 'No checklist in progress'
Go back;Say again
Begin Small Integer Compare : [StartupChecklistItem] Does Not Equal 0
Set small int (condition) [StartupChecklistItem] value as decremented by 1
Execute command, 'Set;Check' (and wait until it completes)
End Condition - Exit when condition met
Begin Small Integer Compare : [ShutdownChecklistItem] Does Not Equal 0
Set small int (condition) [ShutdownChecklistItem] value as decremented by 1
Execute command, 'Set;Check'
End Condition - Exit when condition met
Say, 'No checklist in progress'
With a numeric index, going back is very simple. You could also skip ahead over certain sections by setting the index to the number after it.
Cancel checklist;Abort checklist;reset checklist
Set small int (condition) [StartupChecklistItem] value to 0
Set small int (condition) [ShutdownChecklistItem] value to 0
Say, 'Checklist reset' or 'Checklist aborted' or 'Checklist reset'
As a more direct answer, if you're using text you can store the previous value of your "Checklist" text value, as in:
Set Text [ChecklistPrev] to [Checklist]
Set Text [Checklist] to 'Battery'
repeat
Set Text [Checklist] to [ChecklistPrev]
For the 10 second timer, you can use an external command, which would do little more than
Pause 10 seconds
Set Text [Checklist] to [ChecklistPrev]
The advantage of doing it with a command is terminating the timer easily at will:
checked
Kill command, '10 Second repeat'