Annotation of 43BSD/contrib/mh/h/mh.h, revision 1.1.1.1

1.1       root        1: /* mh.h - main header file for all of MH */
                      2: 
                      3: 
                      4: /* Well-used constants */
                      5: 
                      6: #define        NOTOK           (-1)    /* syscall()s return this on error */
                      7: #define        OK              0       /*  ditto on success */
                      8: #define        DONE            1       /* trinary logic */
                      9: #define ALL            ""
                     10: #define NULLCP         ((char *) 0)
                     11: #define NULLVP         ((char **) 0)
                     12: 
                     13: #define MAXARGS                1000    /* max arguments to exec */
                     14: 
                     15: #define NFOLDERS        200    /* max folder arguments on command line */
                     16: 
                     17: #define        MAXFOLDER       1000    /* message increment */
                     18: #define DMAXFOLDER        4    /* typical number of digits */
                     19: 
                     20: #ifndef        BSD42 || BSD41A || VMUNIX
                     21: #define        vfork           fork
                     22: #endif not BSD                 /* how sad... */
                     23: 
                     24: /*  */
                     25: 
                     26: /* profile structure */
                     27: 
                     28: struct node {
                     29:     char   *n_name;            /* key */
                     30:     char   *n_field;           /* value */
                     31: 
                     32:     char    n_context;         /* context, not profile */
                     33: 
                     34:     struct node *n_next;       /* next entry */
                     35: };
                     36: 
                     37: 
                     38: /* switches structure */
                     39: 
                     40: #define        AMBIGSW         (-2)    /* from smatch() on ambiguous switch */
                     41: #define        UNKWNSW         (-1)    /*  ditto on unknown switch */
                     42: 
                     43: struct swit {
                     44:     char   *sw;
                     45:     int     minchars;
                     46: };
                     47: 
                     48: extern struct swit  anoyes[];  /* standard yes/no switches */
                     49: 
                     50: 
                     51: /* messages structure */
                     52: 
                     53: struct msgs {
                     54:     int     hghmsg;            /* Highest msg in directory     */
                     55:     int     nummsg;            /* Actual Number of msgs        */
                     56:     int     lowmsg;            /* Lowest msg number            */
                     57:     int     curmsg;            /* Number of current msg if any */
                     58: 
                     59:     int     lowsel;            /* Lowest selected msg number   */
                     60:     int     hghsel;            /* Highest selected msg number  */
                     61:     int     numsel;            /* Number of msgs selected      */
                     62: 
                     63:     char   *foldpath;          /* Pathname of folder           */
                     64: 
                     65:     char    msgflags;          /* Folder status bits           */
                     66: #ifndef        MTR
                     67:     char    pad1[sizeof (int) - sizeof (char)];
                     68: #endif not MTR
                     69: #define READONLY  0x01         /*     No write access to folder */
                     70: #define        SEQMOD    0x02          /*     folder's sequences modifed */
                     71: #define        MHPATH    0x04          /*     mhpath-style folder handling */
                     72: #define        OTHERS    0x08          /*     folder has other files   */
                     73: #define        MODIFIED  0x10          /*     msh in-core folder modified */
                     74: #define        FBITS   "\020\01READONLY\02SEQMOD\03MHPATH\04OTHERS\05MODIFIED"
                     75: 
                     76: /* Note well: msgstats[] is a short, so we have 16 bits to work
                     77:        with.  The first 5 are for standard MH message flags,
                     78:        this leaves us 11 for user-defined attributes.  Of these,
                     79:        1 is reserved for future internal use, so this leaves
                     80:        users 10.                                               */
                     81: #define        NATTRS  10              /* could be 11, see above       */
                     82:     char   *msgattrs[NATTRS + 1];/* folder attributes          */
                     83:     short   attrstats;         /* public=0/private=1           */
                     84: #ifndef        MTR
                     85:     char    pad2[sizeof (int) - sizeof (short)];
                     86: #endif not MTR
                     87: 
                     88:     int            lowoff;             /* low element in msgstats[] */
                     89:     int            hghoff;             /* hgh element in msgstats[] */
                     90: 
                     91: #ifndef        MTR
                     92:     short   msgstats[1];       /* msg status                   */
                     93: #else  MTR
                     94:     short  *msgbase;           /* msg base                     */
                     95:     short  *msgstats;          /* msg status                   */
                     96: #endif MTR
                     97: #define EXISTS         0x0001  /*     exists                   */
                     98: #define DELETED                0x0002  /*     deleted                  */
                     99: #define SELECTED       0x0004  /*     selected for use         */
                    100: #define SELECT_EMPTY   0x0008  /*     mhpath "new"             */
                    101: #define        UNSEEN          0x0010  /*     inc/show "unseen"        */
                    102: #define        FFATTRSLOT      5       /*     user-defined attributes  */
                    103:                                /*      first free slot is      */
                    104:                                /*      (1 << 5) or 0x20        */
                    105: #define        MBITS   "\020\01EXISTS\02DELETED\03SELECTED\04NEW\05UNSEEN"
                    106: 
                    107: #ifndef        MTR
                    108: #define        MSIZE(mp,lo,hi) \
                    109:                ((unsigned) (sizeof *mp + ((hi) + 2) * sizeof *mp -> msgstats))
                    110: #else  MTR
                    111: #define        MSIZE(mp,lo,hi) ((unsigned) sizeof *mp)
                    112: #define        MSIZEX(mp,lo,hi)        \
                    113:                ((unsigned) (((hi) - (lo) + 1) * sizeof *mp -> msgstats))
                    114: #endif MTR
                    115: };
                    116: 
                    117: #define        NULLMP  ((struct msgs *) 0)
                    118: 
                    119: /*  */
                    120: 
                    121: /* m_getfld() message parsing */
                    122: 
                    123: #define NAMESZ  128            /* Limit on component name size         */
                    124: 
                    125: #define LENERR  (-2)           /* Name too long error from getfld      */
                    126: #define FMTERR  (-3)           /* Message Format error                 */
                    127: #define FLD      0             /* Field returned                       */
                    128: #define FLDPLUS  1             /* Field " with more to come            */
                    129: #define FLDEOF   2             /* Field " ending at eom                */
                    130: #define BODY     3             /* Body  " with more to come            */
                    131: #define BODYEOF  4             /* Body  " ending at eom                */
                    132: #define FILEEOF  5             /* Reached end of input file            */
                    133: 
                    134: 
                    135: /* Maildrop styles */
                    136: 
                    137: #define        MS_DEFAULT      0       /* default (one msg per file) */
                    138: #define        MS_UNKNOWN      1       /* type not known yet */
                    139: #define        MS_UUCP         2       /* Unix-style "from" lines */
                    140: #define        MS_MMDF         3       /* string mmdlm2 */
                    141: #define        MS_MSH          4       /* whacko msh */
                    142: 
                    143: extern int msg_count;          /* m_getfld() indicators */
                    144: extern int msg_style;          /*  .. */
                    145: extern char *msg_delim;                /*  .. */
                    146: 
                    147: 
                    148: #define        NOUSE   0               /* draft being re-used */
                    149: 
                    150: #define TFOLDER 0              /* path() given a +folder */
                    151: #define TFILE   1              /* path() given a file */
                    152: #define        TSUBCWF 2               /* path() given a @folder */
                    153: 
                    154: #ifndef        LINK
                    155: #define        LINK    "@"
                    156: #endif not LINK
                    157: 
                    158: #ifndef        SBACKUP
                    159: #define        SBACKUP ","
                    160: #endif not SBACKUP
                    161: 
                    162: 
                    163: #define OUTPUTLINELEN  72      /* default line length for headers */
                    164: 
                    165: /*  */
                    166: 
                    167: /*
                    168:  * These standard strings are defined in config.c.  They are the
                    169:  * only system-dependent parameters in MH, and thus by redefining
                    170:  * their values and reloading the various modules, MH will run
                    171:  * on any system.
                    172:  */
                    173: 
                    174: extern char *components;
                    175: extern char *context;
                    176: extern char *current;
                    177: extern char *defalt;
                    178: extern char *digestcomps;
                    179: extern char *distcomps;
                    180: extern char *draft;
                    181: extern char *fileproc;
                    182: extern char *foldprot;
                    183: extern char *forwcomps;
                    184: extern char *incproc;
                    185: extern char *installproc;
                    186: extern char *lproc;
                    187: extern char *mailproc;
                    188: extern char *mh_defaults;
                    189: extern char *mh_profile;
                    190: extern char *mh_seq;
                    191: extern char *mhlformat;
                    192: extern char *mhlforward;
                    193: extern char *mhlproc;
                    194: extern char *moreproc;
                    195: extern char *msgprot;
                    196: extern char *mshproc;
                    197: extern char *nsequence;
                    198: extern char *packproc;
                    199: extern char *postproc;
                    200: extern char *pfolder;
                    201: extern char *psequence;
                    202: extern char *rcvdistcomps;
                    203: extern char *replcomps;
                    204: extern char *rmfproc;
                    205: extern char *rmmproc;
                    206: extern char *sendproc;
                    207: extern char *showproc;
                    208: extern char *slocalproc;
                    209: extern char *sysed;
                    210: extern char *usequence;
                    211: extern char *version;
                    212: extern char *vmhproc;
                    213: extern char *whatnowproc;
                    214: extern char *whomproc;
                    215: 
                    216: /*  */
                    217: 
                    218: /* global variables -sigh- */
                    219: 
                    220: extern char ctxflags;
                    221: #define CTXMOD 0x01            /* context information modified */
                    222: #define        DBITS   "\020\01CTXMOD"
                    223: 
                    224: #ifdef OVERHEAD
                    225: extern int  fd_def;
                    226: extern int  fd_ctx;
                    227: #endif OVERHEAD
                    228: 
                    229: extern char *invo_name;                /* pgm invocation name */
                    230: extern char *mypath;           /* user's $HOME */
                    231: extern char *defpath;          /* pathname of user's profile */
                    232: extern char *ctxpath;          /* pathname of user's context */
                    233: 
                    234: extern struct node *m_defs;
                    235: 
                    236: /*  */
                    237: 
                    238: /* from the MH subroutine library */
                    239: 
                    240: char   *add ();
                    241: void   adios ();
                    242: void   admonish ();
                    243: void   advise ();
                    244: void   advertise ();
                    245: void   ambigsw ();
                    246: int     atooi ();
                    247: char  **brkstring ();
                    248: void   closefds ();
                    249: char   *concat ();
                    250: char   *copy ();
                    251: char  **copyip ();
                    252: void   cpydata ();
                    253: void   cpydgst ();
                    254: void   discard ();
                    255: void   done ();
                    256: int     fdcompare ();
                    257: int     gans ();
                    258: char  **getans ();
                    259: int    getanswer ();
                    260: char   *getcpy ();
                    261: void   help ();
                    262: char   *libpath ();
                    263: int     m_atoi ();
                    264: char   *m_backup ();
                    265: int     m_convert ();
                    266: int     m_delete ();
                    267: char   *m_draft ();
                    268: void   m_eomsbr ();
                    269: int     m_file ();
                    270: char   *m_find ();
                    271: void   m_fmsg ();
                    272: void    m_foil ();
                    273: void   m_getdefs ();
                    274: int     m_getfld ();
                    275: char   *m_getfolder ();
                    276: int     m_gmprot ();
                    277: struct msgs *m_gmsg ();
                    278: char   *m_maildir ();
                    279: char   *m_mailpath ();
                    280: char   *m_name ();
                    281: void   m_readefs ();
                    282: struct msgs *m_remsg ();
                    283: void   m_replace ();
                    284: char   *m_scratch ();
                    285: char   *m_seq ();
                    286: int    m_seqadd ();
                    287: char   *m_seqbits ();
                    288: int    m_seqdel ();
                    289: int    m_seqflag ();
                    290: int    m_seqnew ();
                    291: void   m_setcur ();
                    292: void   m_setseq ();
                    293: void   m_setvis ();
                    294: void    m_sync ();
                    295: char   *m_tmpfil ();
                    296: void   m_unknown ();
                    297: void   m_update ();
                    298: int    m_whatnow ();
                    299: int     makedir ();
                    300: char   *path ();
                    301: int     peekc ();
                    302: int     pidwait ();
                    303: #define        pidXwait(id,cp) pidstatus (pidwait (id, NOTOK), stdout, cp)
                    304: int     pidstatus ();
                    305: void   printsw ();
                    306: void    push ();
                    307: int    putenv ();
                    308: char   *pwd ();
                    309: char   *r1bindex ();
                    310: int    refile ();
                    311: int    remdir ();
                    312: int     showfile ();
                    313: int     smatch ();
                    314: char   *sprintb();
                    315: int    ssequal ();
                    316: int    stringdex ();
                    317: char   *trimcpy ();
                    318: int     type ();
                    319: int     uleq ();
                    320: int    unputenv ();
                    321: int     uprf ();
                    322: int    vfgets ();
                    323: 
                    324: /*  */
                    325: 
                    326: #include "../h/strings.h"
                    327: 
                    328: 
                    329: /* should be in <stdio.h> */
                    330: 
                    331: #ifndef        SYS5
                    332: typedef struct _iobuf  *FP;
                    333: FP   popen ();
                    334: #else  SYS5
                    335: #define        FP      FILE*
                    336: #endif SYS5
                    337: 
                    338: 
                    339: /* miscellaneous */
                    340: 
                    341: #ifndef        BSD42
                    342: #define        rename(f1,f2)   (link (f1, f2) != NOTOK ? unlink (f1) : NOTOK)
                    343: #endif BSD42
                    344: 
                    345: #define        setsig(s,f)     if (signal (s, SIG_IGN) != SIG_IGN) \
                    346:                            (void) signal (s, f)
                    347: #define        setsigx(i,s,f)  if ((i = signal (s, SIG_IGN)) != SIG_IGN) \
                    348:                            (void) signal (s, f)
                    349: 
                    350: #ifdef sun
                    351: #define        ruserpass       _ruserpass
                    352: #endif sun

unix.superglobalmegacorp.com

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