while (1) { if (_mybounds(sp,ptrLen)) goto ERROR_BF; switch (c=chars[pc]) { default: /*nothing*/ break; case bf_GT: sp+=ph[pc].v; break; case bf_LT: sp-=ph[pc].v; break; case bf_PLUS: ptr[sp]+=ph[pc].v; break; case bf_MINUS: ptr[sp]-=ph[pc].v; break; case bf_PERIOD: vm->putcp(vm->putdata, ptr[sp]); break; case bf_COMMA: ptr[sp]=(inp&&*inp)?*inp++:vm->getcp(vm->getdata); break; case bf_OPEN: if (ptr[sp]!=0) break; else pc=ph[pc].v; break; case bf_CLOSE: if (ptr[sp]==0) break; else pc=ph[pc].v; break; case bf_EOP: case 0: pc=-1; goto DONE; } pc++; }