#pragma once typedef struct fmt·State fmt·State; struct fmt·State { struct{ char *beg; char *cur; char *end; } buffer; int n; va_list args; rune verb; ulong flag; int width; int prec; char *thousands, *groups, *decimal; void *file; int (*flush)(fmt·State *); struct { void *heap; mem·Reallocator mem; }; }; #define iota(x) (1 << (x)) enum { fmt·Width = iota(0), fmt·Left = iota(1), fmt·Prec = iota(2), fmt·Sharp = iota(3), fmt·Space = iota(4), fmt·Sign = iota(5), fmt·Apost = iota(6), fmt·Zero = iota(7), fmt·Unsigned = iota(8), fmt·Short = iota(9), fmt·Long = iota(10), fmt·Vlong = iota(11), fmt·Comma = iota(12), fmt·Byte = iota(13), fmt·Ldouble = iota(14), fmt·Flag = iota(15), }; #undef iota /* normal printing interface */ int fmt·print(char *fmt, ...); int fmt·fprint(int fd, char *fmt, ...); int fmt·sprint(char *buf, char *fmt, ...); int fmt·nsprint(int len, char *buf, char *fmt, ...); char *fmt·esprint(char *buf, char *end, char *fmt, ...); int fmt·vprint(char *fmt, va_list args); int fmt·vfprint(int fd, char *fmt, va_list args); int fmt·vnsprint(int len, char *buf, char *fmt, va_list args); char *fmt·vesprint(char *buf, char *end, char *fmt, va_list args); /* low-level interface: used for custom printing verbs */ int fmt·open(int fd, int len, char *buf, fmt·State *); // creates a buffer on a file int fmt·make(mem·Reallocator mem, void *heap, fmt·State *); // creates an in-memory buffer void fmt·free(fmt·State *); // releases an in-memory buffer int fmt·do(fmt·State *, char *fmt); int fmt·write(fmt·State *, char *fmt, ...); int fmt·vwrite(fmt·State *, char *fmt, va_list args); int fmt·install(int c, int (*format)(fmt·State *));