Witajcie

Próbuję rozwiązać następujący problem:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
W kodzie mamy prostą obsługę zewnętrznych przerwań PCINT, klawisze są zwierające do masy.
W głównej pętli mamy N funkcji, które zawierają w sobie pętle, delay'e i dużo innych czasochłonnych rzeczy.
Pytanie: Jak w elegancki sposób za pomocą zewnętrznego przerwania przerwać natychmiast aktualnie wykonywaną funkcję i przejść do następnej? Piszę w elegancki sposób, bo można by było pójść na łatwiznę i po prostu w każdej funkcji co chwilę sprawdzać stan flagi, ale nie jest to zbyt estetyczne rozwiązanie.
W skrócie: za pomocą dwóch przycisków przechodzimy płynnie pomiędzy funkcjami (np. jesteśmy w funkcji 3, klikając pierwszy przycisk przechodzimy do funkcji 2, a drugi przycisk - do funkcji 4)
Widoczna obsługa przerwania dla trzeciego przycisku (stop_flag) powinna umożliwić wykonywanie aktualnej funkcji nieskończoną ilość razy (zapętlić ją, ignorując pozostałe funkcje), ale to nie jest problem i nie o to pytam

Z góry dziękuję za każdy pomysł.
Pozdrawiam
