plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

fmt.h (3175B)


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