/* parse C comments interactively, using events and a state machine */
main()
    state plain
@keypressed(key) <plain>
    {
    state (key == '/') slash
    if (key != '/')
        echo key
    }
@keypressed(key) <slash>
    {
    state (key != '/') plain
    state (key == '*') comment
    echo '/'    /* print '/' held back from previous state */
    if (key != '/')
        echo key
    }
@keypressed(key) <comment>
    {
    echo key
    state (key == '*') star
    }
@keypressed(key) <star>
    {
    echo key
    state (key != '*') comment
    state (key == '/') plain
    }
echo(key) <plain, slash>
    printchar key, yellow
echo(key) <comment, star>
    printchar key, green
printchar(ch, colour)
    {
    setattr .foreground = colour
    printf "%c", ch
    }

