Skip to content

Instantly share code, notes, and snippets.

@fowlmouth
Last active December 13, 2015 20:28
Show Gist options
  • Save fowlmouth/4970500 to your computer and use it in GitHub Desktop.
Save fowlmouth/4970500 to your computer and use it in GitHub Desktop.
nimrod sdl example using iterators as continuations
import sdl, sdl_gfx
discard sdl.init(INIT_EVERYTHING)
var screen = setvideomode(800,600,16,SWSURFACE)
iterator checkEvent {.closure.} =
var event_t: sdl.TEvent
var event = addr event_t
while true:
if sdl.pollEvent(event) > 0:
case event.kind
of QUITEV:
break
of KEYDOWN:
if evKeyboard(event).keysym.sym == K_ESCAPE:
break
else: nil
yield
iterator update {.closure.} =
while true:
yield
iterator draw {.closure.} =
discard screen.fillrect(nil, 0xFFEEFF)
while true:
discard screen.flip()
yield
proc run =
let tasks = [checkEvent, checkEvent, checkEvent, update, draw]
var task = 0
var t = tasks[task]
while not finished(t):
t()
inc task
t = tasks[task mod tasks.len]
run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment