tfmt.h - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       tfmt.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