sclass LineBuffer { VF1 onLine; S currentLine = ""; *() {} *(VF1 *onLine) {} void append(S s) { currentLine += s; int i; while ((i = currentLine.indexOf('\n')) >= 0) { S s = dropTrailingBackslashR(substring(currentLine, 0, i)); currentLine = substring(currentLine, i+1); callF(onLine, s); } } }