|  | #include "lib9.h" | 
|  | #include <bio.h> | 
|  |  | 
|  | static int | 
|  | fmtBflush(Fmt *f) | 
|  | { | 
|  | Biobuf *bp; | 
|  |  | 
|  | bp = f->farg; | 
|  | bp->ocount = (char*)f->to - (char*)f->stop; | 
|  | if(Bflush(bp) < 0) | 
|  | return 0; | 
|  | f->stop = bp->ebuf; | 
|  | f->to = (char*)f->stop + bp->ocount; | 
|  | f->start = f->to; | 
|  | return 1; | 
|  | } | 
|  |  | 
|  | int | 
|  | Bvprint(Biobuf *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; | 
|  | fmtlocaleinit(&f, nil, nil, nil); | 
|  | n = fmtvprint(&f, fmt, arg); | 
|  | bp->ocount = (char*)f.to - (char*)f.stop; | 
|  | if(n == 0) | 
|  | n = f.nfmt; | 
|  | return n; | 
|  | } |