Blame


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