Annotation of 43BSDReno/contrib/mh/h/formatsbr.h, revision 1.1

1.1     ! root        1: /* formatsbr.h - definitions for fmtscan () */
        !             2: 
        !             3: /*
        !             4:  * This structure describes an "interesting" component.  It holds
        !             5:  * the name & text from the component (if found) and one piece of
        !             6:  * auxilary info.  The structure for a particular component is located
        !             7:  * by hashing the name and using it as an index into the ptr array
        !             8:  * "wantcomp".  All format entries that reference a particular component
        !             9:  * point to its comp struct (so we only have to do component specific
        !            10:  * processing once.  e.g., parse an address.).
        !            11:  */
        !            12: struct comp {
        !            13:        char            *c_name;        /* component name (in lower case) */
        !            14:        struct  comp    *c_next;        /* hash chain linkage */
        !            15:        char            *c_text;        /* component text (if found) */
        !            16:        short           c_flags;        /* misc. flags (from formatsbr) */
        !            17:        short           c_type;         /* type info (from fmtcompile) */
        !            18:        union {
        !            19:                struct tws      *c_u_tws;
        !            20:                struct mailname *c_u_mn;
        !            21:        } c_un;
        !            22: #define c_tws c_un.c_u_tws
        !            23: #define c_mn c_un.c_u_mn
        !            24: };
        !            25: 
        !            26: /* c_type bits */
        !            27: #define        CT_ADDR         1       /* referenced as address */
        !            28: #define        CT_DATE         2       /* referenced as date */
        !            29: #define        CT_MYMBOX       4       /* "mymbox" test being done */
        !            30: #define        CT_ADDRPARSE    8       /* address parse being done */
        !            31: 
        !            32: extern int fmt_norm;
        !            33: 
        !            34: struct comp    *wantcomp[128]; /* hash table for deciding if a
        !            35:                                 * component is "interesting" */
        !            36: 
        !            37: /* 
        !            38:  * Hash function for component name.  The function should be
        !            39:  * case independent and probably shouldn't involve a routine
        !            40:  * call.  This function is pretty good but will not work on
        !            41:  * single character component names.  
        !            42:  */
        !            43: #define        CHASH(nm)       (((nm[0]-nm[1])&0x1f)+(nm[2]&0x5f))
        !            44: 
        !            45: #define FINDCOMP(comp,name) \
        !            46:                for (comp = wantcomp[CHASH(name)]; \
        !            47:                     comp && ! uleq(comp->c_name,name); \
        !            48:                     comp = comp->c_next) ;
        !            49: 
        !            50: 
        !            51: /*
        !            52:  * This structure defines one formatting instruction.
        !            53:  */
        !            54: struct format {
        !            55:        unsigned char   f_type;
        !            56:        char            f_fill;
        !            57:        short           f_width;        /* output field width */
        !            58: #define f_skip f_width                 /* instr to skip (false "if") */
        !            59:        union {
        !            60:                struct comp     *f_u_comp;      /* associated component */
        !            61:                char            *f_u_text;      /* literal text */
        !            62:                char            f_u_char;       /* literal character */
        !            63:                int             f_u_value;      /* literal value */
        !            64:        } f_un;
        !            65: #define f_comp f_un.f_u_comp
        !            66: #define f_text f_un.f_u_text
        !            67: #define f_char f_un.f_u_char
        !            68: #define f_value f_un.f_u_value
        !            69: };
        !            70: 
        !            71: int    fmtscan ();
        !            72: char   *new_fs ();

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.