über wiederholtes getchar() Auslesen ginge es zwar prinzipiell, aber F1 liefert 3 Zechen im keyb-Puffer (27,79,80) und shift-F1 wohl sogar 6, was ein Unding wäre, das über eine extra state machine verarbeiten zu wollen - für alle 102x7 möglichen key+modifier-Kombis.
Shift-F1 ist eine Kombination, ich denke bei 3 für eine Einzelne ist Schluss. Kombinationen muss man immer nach dem Puffer verarbeiten. Ausser man nutzt eine library wie ncurses, welche ich persönlich gern nutze. Sehr einfache Struktur und mit ein paar Zeilen Ergebnisse.

So aufwendig ist das ohne eine Library auch nicht... Pseudocode:
Code:
uint8_t c, len;
int ret;

c = get_scancode();
len = lookup_len(c);        // tabelle/array mit möglichen längen (1-3)
array_rcv[0] = c;         // erstes/einzelnes zeichen speichern
if(len > 1) {
      ret = get_more(array[1], array[2], len);        // empfange len mehr zeichen, return = empfangene zeichen
      // etwas tun
}