172335078SCharles Forsyth #include "lib9.h" 272335078SCharles Forsyth #include <bio.h> 372335078SCharles Forsyth 472335078SCharles Forsyth static int fmtBflush(Fmt * f)572335078SCharles ForsythfmtBflush(Fmt *f) 672335078SCharles Forsyth { 772335078SCharles Forsyth Biobuf *bp; 872335078SCharles Forsyth 972335078SCharles Forsyth bp = f->farg; 1072335078SCharles Forsyth bp->ocount = (char*)f->to - (char*)f->stop; 1172335078SCharles Forsyth if(Bflush(bp) < 0) 1272335078SCharles Forsyth return 0; 1372335078SCharles Forsyth f->stop = bp->ebuf; 1472335078SCharles Forsyth f->to = (char*)f->stop + bp->ocount; 1572335078SCharles Forsyth f->start = f->to; 1672335078SCharles Forsyth return 1; 1772335078SCharles Forsyth } 1872335078SCharles Forsyth 1972335078SCharles Forsyth int Bvprint(Biobuf * bp,char * fmt,va_list arg)2072335078SCharles ForsythBvprint(Biobuf *bp, char *fmt, va_list arg) 2172335078SCharles Forsyth { 2272335078SCharles Forsyth int n; 2372335078SCharles Forsyth Fmt f; 2472335078SCharles Forsyth 2572335078SCharles Forsyth f.runes = 0; 2672335078SCharles Forsyth f.stop = bp->ebuf; 2772335078SCharles Forsyth f.start = (char*)f.stop + bp->ocount; 2872335078SCharles Forsyth f.to = f.start; 2972335078SCharles Forsyth f.flush = fmtBflush; 3072335078SCharles Forsyth f.farg = bp; 3172335078SCharles Forsyth f.nfmt = 0; 32*86c8d151SCharles Forsyth #ifdef va_copy 33*86c8d151SCharles Forsyth va_copy(f.args, arg); 34*86c8d151SCharles Forsyth #else 3572335078SCharles Forsyth f.args = arg; 36*86c8d151SCharles Forsyth #endif 3772335078SCharles Forsyth n = dofmt(&f, fmt); 38*86c8d151SCharles Forsyth #ifdef va_copy 39*86c8d151SCharles Forsyth va_end(f.args); 40*86c8d151SCharles Forsyth #endif 4172335078SCharles Forsyth bp->ocount = (char*)f.to - (char*)f.stop; 4272335078SCharles Forsyth return n; 4372335078SCharles Forsyth } 44