Nothing wrong with GOTO if used properly.Nothing better than "goto" to efficiently navigate the multi-laned, interleaved highway of life:
C:if (hold_timer) goto kkhold; if (rep_timer) goto kkrep; if (key_change.bytev) { hold_timer = HOLD_TIMER_INIT; goto kexitr; } else goto kexit; kkhold: if (!key_down.bytev) goto kkpr; if (--hold_timer) goto kexit; key_ph.bytev = key_down.bytev; goto kkrep1; kkrep: if (!key_down.bytev) goto kexitr; if (--rep_timer) goto kexit; kkrep1: key_rpt.bytev = key_down.bytev; rep_timer = REP_TIMER_INIT; goto kexit; kkpr: key_pr.bytev = key_last.bytev; kexitpr: hold_timer = 0; kexitr: rep_timer = 0; kexit: key_rel.bytev = ~key_down.bytev & key_last.bytev; key_last.bytev = key_down.bytev;
but if you use GOTO, you might be attacked by a dinosaur.

