int geteventn()
{
bitmask = 1; // 0x000000001 (ustawiony tylko pierwszy bit)
state_events = events & getmask(state); // getmask zwraca maske aktywnych zdarzen w danym stanie
for (i = 0; i < EVENTS_SIZE; i++)
{
if (state_events & bitmask) // sprawdza czy to zdarzenie jest aktywne
{
events &= ~bitmask; // jesli jest aktywne to usuwa go z zadan do wykonania i zwraca jego indeks
return i;
}
bitmask <<= 1; // przesuwamy maske, będziemy sprawdzac kolejne zdarzenie
}
return ~0; // zwraca same 1 (FF) jesli nie wejdzie do tego wczesniejszego returna
}
int main()
{
do
{
key = 0;
if ((key = getch() != -1)
{
if (key == 'A')
do_sth1();
if (key == 'B')
do_sth2();
}
if ((event = geteventn()) != ~0) // dekoder (geteventn zwraca same 1, jezeli nie ma zadnego zdarzenia do wykonania, lub indeks zdarzenia)
{
// dispatcher
last_event = event;
last_state = state;
(*(state_table[event][state].action))(); // reagujemy na dane zdarzenie wywołując akcje
state = state_table[event][state].nextstate; // przechodzimy do kolejnego stanu
if (state != last_state) // jezeli zmienilismy stan to zerujemy zmienna events, bo w nowym stanie to zdarzenie moze nie byc juz aktywne
events = 0;
}
} while (true);
return 0;
}
{"html5":"htmlmixed","css":"css","javascript":"javascript","php":"php","python":"python","ruby":"ruby","lua":"text\/x-lua","bash":"text\/x-sh","go":"go","c":"text\/x-csrc","cpp":"text\/x-c++src","diff":"diff","latex":"stex","sql":"sql","xml":"xml","apl":"apl","asterisk":"asterisk","c_loadrunner":"text\/x-csrc","c_mac":"text\/x-csrc","coffeescript":"text\/x-coffeescript","csharp":"text\/x-csharp","d":"d","ecmascript":"javascript","erlang":"erlang","groovy":"text\/x-groovy","haskell":"text\/x-haskell","haxe":"text\/x-haxe","html4strict":"htmlmixed","java":"text\/x-java","java5":"text\/x-java","jquery":"javascript","mirc":"mirc","mysql":"sql","ocaml":"text\/x-ocaml","pascal":"text\/x-pascal","perl":"perl","perl6":"perl","plsql":"sql","properties":"text\/x-properties","q":"text\/x-q","scala":"scala","scheme":"text\/x-scheme","tcl":"text\/x-tcl","vb":"text\/x-vb","verilog":"text\/x-verilog","yaml":"text\/x-yaml","z80":"text\/x-z80"}