123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- #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 "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 __cplusplus
- extern "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
|