114 lines · 3.3 KB · C
RawDownload
#ifndef _PLAN9_SOURCE  This header file is an extension to ANSI/POSIX#endif #ifndef __FMT_H_#define __FMT_H_#pragma src "/sys/src/ape/lib/fmt"#pragma lib "/$M/lib/ape/libfmt.a" #include <u.h> /* * The authors of this software are Rob Pike and Ken Thompson. *              Copyright (c) 2002 by Lucent Technologies. * Permission to use, copy, modify, and distribute this software for any * purpose without fee is hereby granted, provided that this entire notice * is included in all copies of any software which is or includes a copy * or modification of this software and in all copies of the supporting * documentation for such software. * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE ANY * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. */ #include <stdarg.h>#include <utf.h> typedef struct Fmt	Fmt;struct Fmt{	unsigned char	runes;		/* output buffer is runes or chars? */	void	*start;			/* of buffer */	void	*to;			/* current place in the buffer */	void	*stop;			/* end of the buffer; overwritten if flush fails */	int	(*flush)(Fmt *);	/* called when to == stop */	void	*farg;			/* to make flush a closure */	int	nfmt;			/* num chars formatted so far */	va_list	args;			/* args passed to dofmt */	int	r;			/* % format Rune */	int	width;	int	prec;	unsigned long	flags;}; enum{	FmtWidth	= 1,	FmtLeft		= FmtWidth << 1,	FmtPrec		= FmtLeft << 1,	FmtSharp	= FmtPrec << 1,	FmtSpace	= FmtSharp << 1,	FmtSign		= FmtSpace << 1,	FmtZero		= FmtSign << 1,	FmtUnsigned	= FmtZero << 1,	FmtShort	= FmtUnsigned << 1,	FmtLong		= FmtShort << 1,	FmtVLong	= FmtLong << 1,	FmtComma	= FmtVLong << 1,	FmtByte		= FmtComma << 1,	FmtLDouble	= FmtByte << 1, 	FmtFlag		= FmtLDouble << 1}; #ifdef	__cplusplusextern "C" { #endif extern	int	print(char*, ...);extern	char*	seprint(char*, char*, char*, ...);extern	char*	vseprint(char*, char*, char*, va_list);extern	int	snprint(char*, int, char*, ...);extern	int	vsnprint(char*, int, char*, va_list);extern	char*	smprint(char*, ...);extern	char*	vsmprint(char*, va_list);extern	int	sprint(char*, char*, ...);extern	int	fprint(int, char*, ...);extern	int	vfprint(int, char*, va_list); extern	int	runesprint(Rune*, char*, ...);extern	int	runesnprint(Rune*, int, char*, ...);extern	int	runevsnprint(Rune*, int, char*, va_list);extern	Rune*	runeseprint(Rune*, Rune*, char*, ...);extern	Rune*	runevseprint(Rune*, Rune*, char*, va_list);extern	Rune*	runesmprint(char*, ...);extern	Rune*	runevsmprint(char*, va_list); extern	int	fmtfdinit(Fmt*, int, char*, int);extern	int	fmtfdflush(Fmt*);extern	int	fmtstrinit(Fmt*);extern	char*	fmtstrflush(Fmt*);extern	int	runefmtstrinit(Fmt*); extern	int	quotestrfmt(Fmt *f);extern	void	quotefmtinstall(void);extern	int	(*fmtdoquote)(int);  extern	int	fmtinstall(int, int (*)(Fmt*));extern	int	dofmt(Fmt*, char*);extern	int	fmtprint(Fmt*, char*, ...);extern	int	fmtvprint(Fmt*, char*, va_list);extern	int	fmtrune(Fmt*, int);extern	int	fmtstrcpy(Fmt*, char*); extern	double	fmtstrtod(const char *, char **);extern	double	fmtcharstod(int(*)(void*), void*); extern	void	werrstr(const char*, ...); #ifdef	__cplusplus}#endif #endif