
for (;;) {
    switch (state) {
        case ENTER_FIRST_FIELD:
            eval_new_state(get_field(data[state]));
            break;
        case ENTER_SECOND_FIELD:
            eval_new_state(get_field(data[state]));
            break;
        ...
        case ENTER_BILLIONTH_FIELD:
            eval_new_state(get_field(data[state]));
            break;
        case FINALLY_GOT_THEM_ALL:
            process_fields(data);
            state = ENTER_FIRST_FIELD;
            break;
        default:
            state = handle_invalid_state(state);
    }
}
