void load_instru(t_vm *vm, t_champ *champ, unsigned char *board) { int i; i = 0; while (op_tab[i].code != *champ->instru && op_tab[i].code != 0) i++; moving_PC(champ, board, 1); if (op_tab[i].code == 0) unknown_ope(champ, vm); else if (op_tab[i].code == 12) forking(vm, champ, board, 1); else if (op_tab[i].code == 15) forking(vm, champ, board, 0); else if (op_tab[i].code == 1) living(champ, board); else if (op_tab[i].code == 9) zjump(champ, board, vm); else { if (vm->debug == 1) print_ope(op_tab[i].mnemonique); champ->ope.nbr_cycles = op_tab[i].nbr_cycles; champ->ope.nbr_args = op_tab[i].nbr_args; champ->ope.code = op_tab[i].code; get_jump(champ, board, &op_tab[i]); } }
int BM(unsigned char text[], unsigned char pat[]) { int jump_tab[256]; int t_len = strlen(text); int p_len = strlen(pat); int i, j, k; get_jump(pat, jump_tab); /* compute the jump table */ for (i = p_len - 1; i < t_len; ) { /* comp. downward */ for (j=p_len-1, k=i; j >= 0 && text[k] == pat[j]; k--,j--) ; if (j < 0) /* if pat[] exhausted ? */ return k + 1; /* YES, pattern found. */ else /* NO, update using jump_tab*/ i += jump_tab[text[i]]; } return NOT_FOUND; /* text[] exhausted. */ }