int bufPuti(Buffer buf, int i) { Length pos0; int ndig, digits[4 * bitsizeof(int)]; /* 4 > lg 10 */ pos0 = bufPosition(buf); if (i == 0) { bufAdd1(buf, '0'); } else { if (i < 0) { bufAdd1(buf, '-'); i = - i; } for (ndig = 0; i; i /= 10, ndig++) digits[ndig] = i % 10; while (ndig--) bufAdd1(buf, '0' + (char) digits[ndig]); } bufAdd1(buf, char0); bufBack1(buf); return bufPosition(buf) - pos0; }
void bufPutSInt(Buffer b, ULong i) { bufAdd1(b, BYTE0(i)); bufAdd1(b, BYTE1(i)); bufAdd1(b, BYTE2(i)); bufAdd1(b, BYTE3(i)); }
int bufPutc(Buffer b, int c) { bufAdd1(b, (char) c); bufAdd1(b, char0); bufBack1(b); return c; }
local String inclGetLine(FILE *file) { int c; String s; bufStart(inclBuffer); while ((c = osGetc(file)) != EOF) { bufAdd1(inclBuffer, c); if (c == '\n') break; } bufAdd1(inclBuffer, char0); s = bufChars(inclBuffer); if (c == EOF && *s == 0) return 0; return s; }
int bufPuts(Buffer b, const char *s) { int cc = strLength(s); bufAddn(b, s, cc); bufAdd1(b,char0); bufBack1(b); return cc; }
String strReplace(String txt, String orig, String repl) { Buffer buf = bufNew(); String s; int replLen; bufNeed(buf, strlen(orig)); replLen = strlen(repl); while (true) { char *nxt = strstr(txt, orig); if (nxt == NULL) break; bufAddn(buf, txt, nxt-txt); bufAddn(buf, repl, replLen); txt = nxt; txt += strlen(orig); } bufAddn(buf, txt, strlen(txt)); bufAdd1(buf, '\0'); s = bufLiberate(buf); return s; }
void bufPutHInt(Buffer b, UShort h) { bufAdd1(b, HBYTE0(h)); bufAdd1(b, HBYTE1(h)); }
void bufPutByte(Buffer b, UByte c) { bufAdd1(b, UNBYTE1(c)); }