Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#include <u.h>
2
#include <libc.h>
3
#include "fmtdef.h"
4
 
5
/* format the output into f->to and return the number of characters fmted  */
6
 
7
int
8
dorfmt(Fmt *f, Rune *fmt)
9
{
10
	Rune *rt, *rs;
11
	int r;
12
	char *t, *s;
13
	int nfmt;
14
 
15
	nfmt = f->nfmt;
16
	for(;;){
17
		if(f->runes){
18
			rt = f->to;
19
			rs = f->stop;
20
			while((r = *fmt++) && r != '%'){
21
				FMTRCHAR(f, rt, rs, r);
22
			}
23
			f->nfmt += rt - (Rune *)f->to;
24
			f->to = rt;
25
			if(!r)
26
				return f->nfmt - nfmt;
27
			f->stop = rs;
28
		}else{
29
			t = f->to;
30
			s = f->stop;
31
			while((r = *fmt++) && r != '%'){
32
				FMTRUNE(f, t, f->stop, r);
33
			}
34
			f->nfmt += t - (char *)f->to;
35
			f->to = t;
36
			if(!r)
37
				return f->nfmt - nfmt;
38
			f->stop = s;
39
		}
40
 
41
		fmt = _fmtdispatch(f, fmt, 1);
42
		if(fmt == nil)
43
			return -1;
44
	}
45
}