while (1) { if (_mybounds(sp,ptrLen)) goto ERROR_BF; c = bfo[pc].cmd; switch (c) { case bfo_NOOP: /*nothing*/ break; case bfo_VAL: ptr[sp]+=(char)bfo[pc].val; break; case bfo_VAL_M: ptr[sp]-=(char)bfo[pc].val; break; case bfo_PUT: vm->putcp(vm->putdata, ptr[sp]); break; case bfo_GET: ptr[sp]=(inp&&*inp)?*inp++:vm->getcp(vm->getdata); break; case bfo_FWD: if (ptr[sp]==0) pc += bfo[pc].val; ptr[sp]+= bfo[pc].buf; break; case bfo_REW: if (ptr[sp]!=0) pc += bfo[pc].val; ptr[sp]+= bfo[pc].buf; break; case bfo_PTR_S: c = bfo[pc].val; while (ptr[sp]!=0) { sp+=c; if (_mybounds(sp,ptrLen)) goto ERROR_BF; } break; case bfo_VAL_MZ: ptr[sp+bfo[pc].buf] += bfo[pc].val*ptr[sp]; ptr[sp] = 0; break; case bfo_VAL_MUL: ptr[sp+bfo[pc].buf] += bfo[pc].val*ptr[sp]; break; case bfo_VAL_SET: ptr[sp] = bfo[pc].val; break; case bfo_MUL_MUL: ptr[sp+bfo[pc].buf] *= bfo[pc].val*ptr[sp]; break; case bfo_EOP: pc=-1; goto DONE; } if (--icount==0) break; sp += bfo[pc].off; pc++; }