ref: b079d708225b49908129e3ea54d1bb80c004b25f
dir: /fsm.c/
#include <u.h> #include <libc.h> #include <draw.h> #include "dat.h" #include "fns.h" void (*step)(void); void (*input)(Rune); vlong tc; static vlong t0; enum{ Te9 = 1000000000, Te6 = 1000000, Hz = 1000, TΔ = Te9 / Hz, }; int advclock(void) { int Δtc; vlong t; t = nsec(); Δtc = (t - t0) / TΔ; if(Δtc <= 0) Δtc = 1; tc += Δtc; t0 += Δtc * TΔ; return Δtc; } void setfsm(void (*stepfn)(void), void (*inputfn)(Rune), int clear) { step = stepfn; input = inputfn; t0 = nsec(); if(clear) tc = 0; } void initfsm(void) { srand(time(nil)); enterintro(); }