Annotation of 43BSD/contrib/mh/h/mh.h, revision 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.