dorfmt.c - 9base - revived minimalist port of Plan 9 userland to Unix | |
git clone git://git.suckless.org/9base | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
dorfmt.c (985B) | |
--- | |
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" | |
7 | |
8 /* format the output into f->to and return the number of characters fmte… | |
9 | |
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; | |
18 | |
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 } | |
44 | |
45 fmt = (Rune*)__fmtdispatch(f, (Rune*)fmt, 1); | |
46 if(fmt == nil) | |
47 return -1; | |
48 } | |
49 return 0; /* not reached */ | |
50 } |