Blob


1 /* Copyright (c) 2002-2006 Lucent Technologies; see LICENSE */
2 #include <stdarg.h>
3 #include <string.h>
4 #include "plan9.h"
5 #include "fmt.h"
6 #include "fmtdef.h"
8 /* format the output into f->to and return the number of characters fmted */
10 /* BUG: THIS FILE IS NOT UPDATED TO THE NEW SPEC */
11 int
12 dorfmt(Fmt *f, const Rune *fmt)
13 {
14 Rune *rt, *rs;
15 int r;
16 char *t, *s;
17 int nfmt;
19 nfmt = f->nfmt;
20 for(;;){
21 if(f->runes){
22 rt = (Rune*)f->to;
23 rs = (Rune*)f->stop;
24 while((r = *fmt++) && r != '%'){
25 FMTRCHAR(f, rt, rs, r);
26 }
27 f->nfmt += rt - (Rune *)f->to;
28 f->to = rt;
29 if(!r)
30 return f->nfmt - nfmt;
31 f->stop = rs;
32 }else{
33 t = (char*)f->to;
34 s = (char*)f->stop;
35 while((r = *fmt++) && r != '%'){
36 FMTRUNE(f, t, f->stop, r);
37 }
38 f->nfmt += t - (char *)f->to;
39 f->to = t;
40 if(!r)
41 return f->nfmt - nfmt;
42 f->stop = s;
43 }
45 fmt = (Rune*)__fmtdispatch(f, (Rune*)fmt, 1);
46 if(fmt == nil)
47 return -1;
48 }
49 return 0; /* not reached */
50 }