int Bvlprint(Biobuf *bp, const char *fmt, va_list args) { Fmt f; Rune buf[256]; int res; if(utf8locale()) return Bvprint(bp, fmt, args); f.runes = 1; f.start = (char*)buf; f.to = (char*)buf; f.stop = (char*)(buf + nelem(buf) - 1); f.flush = fmtBlflush; f.farg = bp; f.nfmt = 0; va_copy(f.args, args); res = dofmt(&f, fmt); va_end(f.args); if(res > 0 && fmtBlflush(&f) == 0) return -1; return res; }
int vfprint(int fd, char *fmt, va_list args) { Fmt f; char buf[256]; int n; fmtfdinit(&f, fd, buf, sizeof(buf)); f.args = args; n = dofmt(&f, fmt); if(n > 0 && _fmtFdFlush(&f) == 0) return -1; return n; }
/* * format a string into the output buffer * designed for formats which themselves call fmt */ int fmtvprint(Fmt *f, char *fmt, va_list args) { va_list va; int n; va = f->args; f->args = args; n = dofmt(f, fmt); f->args = va; if(n >= 0) return 0; return n; }
int vfprint(int fd, const char *fmt, va_list args) { Fmt f; char buf[256]; int n; fmtfdinit(&f, fd, buf, sizeof(buf)); va_copy(f.args,args); n = dofmt(&f, fmt); va_end(f.args); if(n > 0 && __fmtFdFlush(&f) == 0) return -1; return n; }
/* * print into an allocated string buffer */ char* vsmprint(char *fmt, va_list args) { Fmt f; int n; if(fmtstrinit(&f) < 0) return nil; f.args = args; n = dofmt(&f, fmt); if(n < 0) return nil; *(char*)f.to = '\0'; return (char*)f.start; }
/* Test printer that loads unusual decimal point and separator */ char* mysmprint(char *fmt, ...) { Fmt f; if(fmtstrinit(&f) < 0) return 0; va_start(f.args, fmt); f.decimal = smprint("%C", lightsmiley); f.thousands = smprint("%C", darksmiley); f.grouping = "\1\2\3\4"; if(dofmt(&f, fmt) < 0) return 0; va_end(f.args); return fmtstrflush(&f); }
/* * print into an allocated string buffer */ char* vsmprint(const char *fmt, va_list args) { Fmt f; int n; if(fmtstrinit(&f) < 0) return nil; va_copy(f.args,args); n = dofmt(&f, fmt); va_end(f.args); if(n < 0){ free(f.start); return nil; } return fmtstrflush(&f); }
/* * print into an allocated string buffer */ char* vsmprint(char *fmt, va_list args) { Fmt f; int n; if(fmtstrinit(&f) < 0) return nil; VA_COPY(f.args,args); n = dofmt(&f, fmt); VA_END(f.args); if(n < 0){ free(f.start); return nil; } return fmtstrflush(&f); }
int Bvprint(Biobufhdr *bp, char *fmt, va_list arg) { int n; Fmt f; f.runes = 0; f.stop = bp->ebuf; f.start = (char*)f.stop + bp->ocount; f.to = f.start; f.flush = fmtBflush; f.farg = bp; f.nfmt = 0; f.args = arg; n = dofmt(&f, fmt); bp->ocount = (char*)f.to - (char*)f.stop; return n; }
int vsnprint(char *buf, int len, char *fmt, va_list args) { Fmt f; if(len <= 0) return -1; f.runes = 0; f.start = buf; f.to = buf; f.stop = buf + len - 1; f.flush = nil; f.farg = nil; f.nfmt = 0; f.args = args; dofmt(&f, fmt); *(char*)f.to = '\0'; return (char*)f.to - buf; }
char* vseprint(char *buf, char *e, char *fmt, va_list args) { Fmt f; if(e <= buf) return nil; f.runes = 0; f.start = buf; f.to = buf; f.stop = e - 1; f.flush = nil; f.farg = nil; f.nfmt = 0; f.args = args; dofmt(&f, fmt); *(char*)f.to = '\0'; return f.to; }
/* * format a string into the output buffer * designed for formats which themselves call fmt */ int fmtvprint(Fmt *f, const char *fmt, va_list args) { va_list va; int n; //va = f->args; //f->args = args; va_copy(va,f->args); va_end(f->args); va_copy(f->args,args); n = dofmt(f, fmt); va_end(f->args); va_copy(f->args,va); va_end(va); //f->args = va; if(n >= 0) return 0; return n; }
int runevsnprint(Rune *buf, int len, char *fmt, va_list args) { Fmt f; if(len <= 0) return -1; f.runes = 1; f.start = buf; f.to = buf; f.stop = buf + len - 1; f.flush = 0; f.farg = nil; f.nfmt = 0; VA_COPY(f.args,args); dofmt(&f, fmt); VA_END(f.args); *(Rune*)f.to = '\0'; return (Rune*)f.to - buf; }
char* vseprint(char *buf, char *e, const char *fmt, va_list args) { Fmt f; if(e <= buf) return nil; f.runes = 0; f.start = buf; f.to = buf; f.stop = e - 1; f.flush = 0; f.farg = nil; f.nfmt = 0; va_copy(f.args,args); dofmt(&f, fmt); va_end(f.args); *(char*)f.to = '\0'; return (char*)f.to; }
/* * print into an allocated string buffer */ Rune* runevsmprint(const char *fmt, va_list args) { Fmt f; int n; if(runefmtstrinit(&f) < 0) return nil; va_copy(f.args,args); n = dofmt(&f, fmt); va_end(f.args); if(f.start == nil) return nil; if(n < 0){ free(f.start); return nil; } *(Rune*)f.to = '\0'; return (Rune*)f.start; }
/* * format a string into the output buffer * designed for formats which themselves call fmt, * but ignore any width flags */ int fmtprint(Fmt *f, char *fmt, ...) { va_list va; int n; f->flags = 0; f->width = 0; f->prec = 0; va = f->args; va_start(f->args, fmt); n = dofmt(f, fmt); va_end(f->args); f->flags = 0; f->width = 0; f->prec = 0; f->args = va; if(n >= 0) return 0; return n; }
int runevsnprint(Rune *buf, int len, const char *fmt, va_list args) { Fmt f; if(len <= 0) return -1; f.runes = 1; f.start = buf; f.to = buf; f.stop = buf + len - 1; f.flush = nil; f.farg = nil; f.nfmt = 0; //f.args = args; va_copy(f.args,args); dofmt(&f, fmt); va_end(f.args); *(Rune*)f.to = '\0'; return (Rune*)f.to - buf; }
char* vseprint(char *buf, char *e, char *fmt, va_list args) { Fmt f; if(e <= buf) return nil; f.runes = 0; f.start = buf; f.to = buf; f.stop = e - 1; f.flush = 0; f.farg = nil; f.nfmt = 0; VA_COPY(f.args,args); fmtlocaleinit(&f, nil, nil, nil); dofmt(&f, fmt); VA_END(f.args); *(char*)f.to = '\0'; return (char*)f.to; }
Rune* runevseprint(Rune *buf, Rune *e, const char *fmt, va_list args) { Fmt f; if(e <= buf) return nil; f.runes = 1; f.start = buf; f.to = buf; f.stop = e - 1; f.flush = nil; f.farg = nil; f.nfmt = 0; //f.args = args; va_copy(f.args,args); dofmt(&f, fmt); va_end(f.args); *(Rune*)f.to = '\0'; return f.to; }
/* * format a string into the output buffer * designed for formats which themselves call fmt, * but ignore any width flags */ int fmtprint(Fmt *f, char *fmt, ...) { va_list va; int n; f->flags = 0; f->width = 0; f->prec = 0; VA_COPY(va, f->args); VA_END(f->args); va_start(f->args, fmt); n = dofmt(f, fmt); va_end(f->args); f->flags = 0; f->width = 0; f->prec = 0; VA_COPY(f->args,va); VA_END(va); if(n >= 0) return 0; return n; }
/* * format a string into the output buffer * designed for formats which themselves call fmt, * but ignore any width flags */ int fmtvprint(Fmt *f, const char *fmt, va_list args) { va_list va; int n; f->flags = 0; f->width = 0; f->prec = 0; va_copy(va,f->args); va_end(f->args); va_copy(f->args,args); n = dofmt(f, fmt); f->flags = 0; f->width = 0; f->prec = 0; va_end(f->args); va_copy(f->args,va); va_end(va); if(n >= 0) return 0; return n; }
int b_fmt(int argc, char** argv, void *context) { register int n; char* cp; Fmt_t fmt; char outbuf[8 * 1024]; fmt.flags = 0; fmt.out = sfstdout; fmt.outbuf = outbuf; fmt.outp = 0; fmt.endbuf = &outbuf[72]; fmt.indent = 0; fmt.nextdent = 0; fmt.nwords = 0; fmt.prefix = 0; fmt.quote = 0; fmt.retain = 0; fmt.section = 1; cmdinit(argc, argv, context, ERROR_CATALOG, 0); for (;;) { switch (n = optget(argv, usage)) { case 'c': case 'o': case 's': case 'u': setoption(&fmt, n); continue; case 'w': if (opt_info.num < TABSZ || opt_info.num>= sizeof(outbuf)) error(2, "width out of range"); fmt.endbuf = &outbuf[opt_info.num]; continue; case ':': error(2, "%s", opt_info.arg); break; case '?': error(ERROR_usage(2), "%s", opt_info.arg); break; } break; } argv += opt_info.index; if (error_info.errors) error(ERROR_usage(2), "%s", optusage(NiL)); if (isoption(&fmt, 'o')) setoption(&fmt, 'c'); if (isoption(&fmt, 's')) clroption(&fmt, 'u'); if (cp = *argv) argv++; do { if (!cp || streq(cp, "-")) fmt.in = sfstdin; else if (!(fmt.in = sfopen(NiL, cp, "r"))) { error(ERROR_system(0), "%s: cannot open", cp); error_info.errors = 1; continue; } dofmt(&fmt); if (fmt.in != sfstdin) sfclose(fmt.in); } while (cp = *argv++); outline(&fmt); if (sfsync(sfstdout)) error(ERROR_system(0), "write error"); return error_info.errors != 0; }