Subversion Repositories planix.SVN

Rev

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

Rev Author Line No. Line
2 - 1
#ifndef _PLAN9_SOURCE
2
  This header file is an extension to ANSI/POSIX
3
#endif
4
 
5
#ifndef __FMT_H_
6
#define __FMT_H_
7
#pragma src "/sys/src/ape/lib/fmt"
8
#pragma lib "/$M/lib/ape/libfmt.a"
9
 
10
#include <u.h>
11
 
12
/*
13
 * The authors of this software are Rob Pike and Ken Thompson.
14
 *              Copyright (c) 2002 by Lucent Technologies.
15
 * Permission to use, copy, modify, and distribute this software for any
16
 * purpose without fee is hereby granted, provided that this entire notice
17
 * is included in all copies of any software which is or includes a copy
18
 * or modification of this software and in all copies of the supporting
19
 * documentation for such software.
20
 * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
21
 * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE ANY
22
 * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
23
 * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
24
 */
25
 
26
#include <stdarg.h>
27
#include <utf.h>
28
 
29
typedef struct Fmt	Fmt;
30
struct Fmt{
31
	unsigned char	runes;		/* output buffer is runes or chars? */
32
	void	*start;			/* of buffer */
33
	void	*to;			/* current place in the buffer */
34
	void	*stop;			/* end of the buffer; overwritten if flush fails */
35
	int	(*flush)(Fmt *);	/* called when to == stop */
36
	void	*farg;			/* to make flush a closure */
37
	int	nfmt;			/* num chars formatted so far */
38
	va_list	args;			/* args passed to dofmt */
39
	int	r;			/* % format Rune */
40
	int	width;
41
	int	prec;
42
	unsigned long	flags;
43
};
44
 
45
enum{
46
	FmtWidth	= 1,
47
	FmtLeft		= FmtWidth << 1,
48
	FmtPrec		= FmtLeft << 1,
49
	FmtSharp	= FmtPrec << 1,
50
	FmtSpace	= FmtSharp << 1,
51
	FmtSign		= FmtSpace << 1,
52
	FmtZero		= FmtSign << 1,
53
	FmtUnsigned	= FmtZero << 1,
54
	FmtShort	= FmtUnsigned << 1,
55
	FmtLong		= FmtShort << 1,
56
	FmtVLong	= FmtLong << 1,
57
	FmtComma	= FmtVLong << 1,
58
	FmtByte		= FmtComma << 1,
59
	FmtLDouble	= FmtByte << 1,
60
 
61
	FmtFlag		= FmtLDouble << 1
62
};
63
 
64
#ifdef	__cplusplus
65
extern "C" { 
66
#endif
67
 
68
extern	int	print(char*, ...);
69
extern	char*	seprint(char*, char*, char*, ...);
70
extern	char*	vseprint(char*, char*, char*, va_list);
71
extern	int	snprint(char*, int, char*, ...);
72
extern	int	vsnprint(char*, int, char*, va_list);
73
extern	char*	smprint(char*, ...);
74
extern	char*	vsmprint(char*, va_list);
75
extern	int	sprint(char*, char*, ...);
76
extern	int	fprint(int, char*, ...);
77
extern	int	vfprint(int, char*, va_list);
78
 
79
extern	int	runesprint(Rune*, char*, ...);
80
extern	int	runesnprint(Rune*, int, char*, ...);
81
extern	int	runevsnprint(Rune*, int, char*, va_list);
82
extern	Rune*	runeseprint(Rune*, Rune*, char*, ...);
83
extern	Rune*	runevseprint(Rune*, Rune*, char*, va_list);
84
extern	Rune*	runesmprint(char*, ...);
85
extern	Rune*	runevsmprint(char*, va_list);
86
 
87
extern	int	fmtfdinit(Fmt*, int, char*, int);
88
extern	int	fmtfdflush(Fmt*);
89
extern	int	fmtstrinit(Fmt*);
90
extern	char*	fmtstrflush(Fmt*);
91
extern	int	runefmtstrinit(Fmt*);
92
 
93
extern	int	quotestrfmt(Fmt *f);
94
extern	void	quotefmtinstall(void);
95
extern	int	(*fmtdoquote)(int);
96
 
97
 
98
extern	int	fmtinstall(int, int (*)(Fmt*));
99
extern	int	dofmt(Fmt*, char*);
100
extern	int	fmtprint(Fmt*, char*, ...);
101
extern	int	fmtvprint(Fmt*, char*, va_list);
102
extern	int	fmtrune(Fmt*, int);
103
extern	int	fmtstrcpy(Fmt*, char*);
104
 
105
extern	double	fmtstrtod(const char *, char **);
106
extern	double	fmtcharstod(int(*)(void*), void*);
107
 
108
extern	void	werrstr(const char*, ...);
109
 
110
#ifdef	__cplusplus
111
}
112
#endif
113
 
114
#endif