Method code for $buffer.bufsub()

[Turn on line numbering]
arg buf, a, b;
var i, la, lb, lt;

// do we need a builtin for this?
// from Kipp's core (until I write a builtin--optimized by Brandon) 
if (a == b || buflen(a) > buflen(buf) || !a || !buf)
    return buf;
la = buflen(a);
lb = buflen(b);
lt = buflen(buf);
i = 1;
anticipate_assignment();
while (i <= buflen(buf) && (i = bufidx(buf, a, i))) {
    buf = subbuf(buf, 1, i - 1) + b + subbuf(buf, i + la);
    i += lb;
}
return buf;

// Created 27-Mar-1995 as a part of ColdCore, see: @help Credit

Tlon