2 This header file is an extension to ANSI/POSIX
7 #pragma src "/sys/src/ape/lib/fmt"
8 #pragma lib "/$M/lib/ape/libfmt.a"
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.
29 typedef struct Fmt 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 */
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,
61 FmtFlag = FmtLDouble << 1
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);
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);
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*);
93 extern int quotestrfmt(Fmt *f);
94 extern void quotefmtinstall(void);
95 extern int (*fmtdoquote)(int);
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*);
105 extern double fmtstrtod(const char *, char **);
106 extern double fmtcharstod(int(*)(void*), void*);
108 extern void werrstr(const char*, ...);