This is defs.h in view mode; [Download] [Up]
/* $Id: defs.h,v 5.11 1992/12/11 01:58:50 syd Exp $ */
/*******************************************************************************
* The Elm Mail System - $Revision: 5.11 $ $State: Exp $
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
*******************************************************************************
* Bug reports, patches, comments, suggestions should be sent to:
*
* Syd Weinstein, Elm Coordinator
* elm@DSI.COM dsinc!elm
*
*******************************************************************************
* $Log: defs.h,v $
* Revision 5.11 1992/12/11 01:58:50 syd
* Allow for use from restricted shell by putting SHELL=/bin/sh in the
* environment of spawned mail transport program.
* From: chip@tct.com (Chip Salzenberg)
*
* Revision 5.10 1992/12/11 01:29:27 syd
* add include of sys/types.h for time_t usage
*
* Revision 5.9 1992/12/07 02:47:45 syd
* fix time variables that are not declared time_t
* From: Syd via prompting from Jim Brown
*
* Revision 5.8 1992/11/26 01:46:26 syd
* add Decode option to copy_message, convert copy_message to
* use bit or for options.
* From: Syd and bjoerns@stud.cs.uit.no (Bjoern Stabell)
*
* Revision 5.7 1992/11/22 01:22:29 syd
* This mod fixes overlapping prototypes for strchr and index on
* Convex.
* From: Jukka Ukkonen <ukkonen@csc.fi>
*
* Revision 5.6 1992/11/07 20:40:27 syd
* flag for no tite for curses calls
*
* Revision 5.5 1992/11/07 20:05:52 syd
* change to use header_cmp to allow for linear white space around the colon
* From: Syd
*
* Revision 5.4 1992/10/27 01:40:08 syd
* fix compilation error on posix_signals for non STDC
* From: tom@osf.org
*
* Revision 5.3 1992/10/25 02:01:58 syd
* Here are the patches to support POSIX sigaction().
* From: tom@osf.org
*
* Revision 5.2 1992/10/25 01:47:45 syd
* fixed a bug were elm didn't call metamail on messages with a characterset,
* which could be displayed by elm itself, but message is encoded with QP
* or BASE64
* From: Klaus Steinberger <Klaus.Steinberger@Physik.Uni-Muenchen.DE>
*
* Revision 5.1 1992/10/03 22:34:39 syd
* Initial checkin as of 2.4 Release at PL0
*
*
******************************************************************************/
/** define file for ELM mail system. **/
#include <sys/types.h> /* for fundamental types */
#include "../config.h"
#include "sysdefs.h" /* system/configurable defines */
# define VERSION "2.4" /* Version number... */
# define VERS_DATE "October 1, 1992" /* for elm -v option */
# define WHAT_STRING \
"@(#) Version 2.4, USENET supported version, released October 1, 1992"
#if defined(__STDC__) || defined(_AIX)
# define ANSI_C 1
#endif
#define KLICK 25
#define SLEN 256 /* long for ensuring no overwrites... */
#define SHORT 10 /* super short strings! */
#define NLEN 48 /* name length for aliases */
#define WLEN 20
#define STRING 128 /* reasonable string length for most.. */
#define LONG_STRING 512 /* even longer string for group expansion */
#define VERY_LONG_STRING 2560 /* huge string for group alias expansion */
#define MAX_LINE_LEN 5120 /* even bigger string for "filter" prog.. */
#define BREAK '\0' /* default interrupt */
#define BACKSPACE '\b' /* backspace character */
#define TAB '\t' /* tab character */
#define RETURN '\r' /* carriage return char */
#define LINE_FEED '\n' /* line feed character */
#define FORMFEED '\f' /* form feed (^L) char */
#define COMMA ',' /* comma character */
#define SPACE ' ' /* space character */
#define DOT '.' /* period/dot character */
#define BANG '!' /* exclaimation mark! */
#define AT_SIGN '@' /* at-sign character */
#define PERCENT '%' /* percent sign char. */
#define COLON ':' /* the colon .. */
#define BACKQUOTE '`' /* backquote character */
#define TILDE_ESCAPE '~' /* escape character~ */
#define ESCAPE '\033' /* the escape */
#define NO_OP_COMMAND '\0' /* no-op for timeouts */
#define STANDARD_INPUT 0 /* file number of stdin */
#ifndef TRUE
#define TRUE 1
#define FALSE 0
#endif
#define NO 0
#define YES 1
#define NO_TITE 2 /* ti/te or in flag */
#define MAYBE 2 /* a definite define, eh? */
#define FORM 3 /* <nevermind> */
#define PREFORMATTED 4 /* forwarded form... */
#define SAME_PAGE 1 /* redraw current only */
#define NEW_PAGE 2 /* redraw message list */
#define ILLEGAL_PAGE 0 /* error in page list, punt */
#define PAD 0 /* for printing name of */
#define FULL 1 /* the sort we're using */
#define OUTGOING 0 /* defines for lock file */
#define INCOMING 1 /* creation..see lock() */
/* options to the system_call() procedure */
#define SY_USER_SHELL (1<<0) /* use user shell instead of /bin/sh */
#define SY_ENV_SHELL (1<<1) /* put SHELL=[shell] into environ */
#define SY_ENAB_SIGHUP (1<<2) /* pgm to exec can handle signals */
#define SY_ENAB_SIGINT (1<<3) /* ...and it can handle SIGINT too */
#define SY_DUMPSTATE (1<<4) /* create folder state dump file */
/* options to the copy_message() procedure */
#define CM_REMOVE_HEADER (1<<0) /* skip header of message */
#define CM_REMOTE (1<<1) /* append remote from hostname to first line */
#define CM_UPDATE_STATUS (1<<2) /* Update Status: Header */
#define CM_MMDF_HEAD (1<<3) /* strip mmdf message seperator */
#define CM_REMAIL (1<<4) /* Add Sender: and Orig-To: headers */
#define CM_DECODE (1<<5) /* prompt for key if message is encrypted */
#define EXECUTE_ACCESS 01 /* These five are */
#define WRITE_ACCESS 02 /* for the calls */
#define READ_ACCESS 04 /* to access() */
#define ACCESS_EXISTS 00 /* <etc> */
#define EDIT_ACCESS 06 /* (this is r+w access) */
#define BIG_NUM 999999 /* big number! */
#define BIGGER_NUM 9999999 /* bigger number! */
#define START_ENCODE "[encode]"
#define END_ENCODE "[clear]"
#define DONT_SAVE "[no save]"
#define DONT_SAVE2 "[nosave]"
#define alias_file ".aliases"
#define group_file ".groups"
#define system_file ".systems"
#define default_folders "Mail"
#define default_recvdmail "=received"
#define default_sentmail "=sent"
/* environment variable with name of folder state dump file */
#define FOLDER_STATE_ENV "ELMSTATE"
/** some defines for the 'userlevel' variable... **/
#define RANK_AMATEUR 0
#define AMATEUR 1
#define OKAY_AT_IT 2
#define GOOD_AT_IT 3
#define EXPERT 4
#define SUPER_AT_IT 5
/** some defines for the "status" field of the header and alias record **/
#define ACTION 1 /* bit masks, of course */
#define CONFIDENTIAL 2
#define DELETED 4
#define EXPIRED 8
#define FORM_LETTER 16
#define NEW 32
#define PRIVATE 64
#define TAGGED 128
#define URGENT 256
#define VISIBLE 512
#define UNREAD 1024
#define STATUS_CHANGED 2048
#define MIME_MESSAGE 4096 /* indicates existence of MIME Header */
#define MIME_NEEDDECOD 8192 /* indicates that we need to call mmdecode */
#define MIME_NOTPLAIN 16384 /* indicates that we have a content-type,
for which we need metamail anyway. */
/** some defines for the "type" field of the alias record **/
#define SYSTEM 1 /* bit masks, of course */
#define USER 2
#define PERSON 4
#define GROUP 8
#define DUPLICATE 16 /* system aliases only */
/** some defines to aid in the limiting of alias displays **/
#define BY_NAME 64
#define BY_ALIAS 128
#define UNDELETE 0 /* purely for ^U function... */
/** values for headers exit_disposition field */
#define UNSET 0
#define KEEP 1
#define STORE 2
#define DELETE 3
/** some months... **/
#define JANUARY 0 /* months of the year */
#define FEBRUARY 1
#define MARCH 2
#define APRIL 3
#define MAY 4
#define JUNE 5
#define JULY 6
#define AUGUST 7
#define SEPTEMBER 8
#define OCTOBER 9
#define NOVEMBER 10
#define DECEMBER 11
#define equal(s,w) (strcmp(s,w) == 0)
#define min(a,b) a < b? a : b
#define ctrl(c) c - 'A' + 1 /* control character mapping */
#define plural(n) n == 1 ? "" : "s"
#define lastch(s) s[strlen(s)-1]
#define ifmain(a,b) (inalias ? b : a)
#ifdef MEMCPY
# ifdef I_MEMORY
# include <memory.h>
# else /* I_MEMORY */
# ifndef __STDC__ /* ANSI puts these in string.h */
extern char *memcpy(), *memset();
extern int memcmp();
# endif /* __STDC__ */
# endif /* I_MEMORY */
#define bcopy(s1,s2,l) memcpy(s2,s1,l)
#define bcmp(s1,s2,l) memcmp(s1,s2,l)
#define bzero(s,l) memset(s,0,l)
#endif /* MEMCPY */
#ifdef I_STDLIB
# include <stdlib.h>
#else
typedef char * malloc_t;
extern malloc_t calloc();
extern int free();
extern malloc_t malloc();
extern malloc_t realloc();
extern void exit();
extern char *getenv();
#endif
/* find tab stops preceding or following a given column position 'a', where
* the column position starts counting from 1, NOT 0!
* The external integer "tabspacing" must be declared to use this. */
#define prev_tab(a) (((((a-1)/tabspacing))*tabspacing)+1)
#define next_tab(a) (((((a-1)/tabspacing)+1)*tabspacing)+1)
#define movement_command(c) (c == 'j' || c == 'k' || c == ' ' || \
c == BACKSPACE || c == ESCAPE || c == '*' || \
c == '-' || c == '+' || c == '=' || \
c == '#' || c == '@' || c == 'x' || \
c == 'a' || c == 'q')
#define no_ret(s) { register int xyz; /* varname is for lint */ \
for (xyz=strlen(s)-1; xyz >= 0 && \
(s[xyz] == '\r' || s[xyz] == '\n'); ) \
s[xyz--] = '\0'; \
}
#define first_word(s,w) (strncmp(s,w, strlen(w)) == 0)
#define first_word_nc(s,w) (strincmp(s,w, strlen(w)) == 0)
#define ClearLine(n) MoveCursor(n,0); CleartoEOLN()
#define whitespace(c) (c == ' ' || c == '\t')
#define ok_rc_char(c) (isalnum(c) || c == '-' || c == '_')
#define ok_alias_char(c) (isalnum(c) || c == '-' || c == '_' || c == '.')
#define onoff(n) (n == 0 ? "OFF" : "ON")
/** The next function is so certain commands can be processed from the showmsg
routine without rewriting the main menu in between... **/
#define special(c) (c == 'j' || c == 'k')
/** and a couple for dealing with status flags... **/
#define ison(n,mask) (n & mask)
#define isoff(n,mask) (!ison(n, mask))
#define setit(n,mask) n |= mask
#define clearit(n, mask) n &= ~mask
/** a few for the usage of function keys... **/
#define f_key1 1
#define f_key2 2
#define f_key3 3
#define f_key4 4
#define f_key5 5
#define f_key6 6
#define f_key7 7
#define f_key8 8
#define MAIN 0
#define ALIAS 1
#define YESNO 2
#define CHANGE 3
#define READ 4
#define MAIN_HELP 0
#define OPTIONS_HELP 1
#define ALIAS_HELP 2
#define PAGER_HELP 3
/** types of folders **/
#define NO_NAME 0 /* variable contains no file name */
#define NON_SPOOL 1 /* mailfile not in mailhome */
#define SPOOL 2 /* mailfile in mailhome */
/* the following is true if the current mailfile is the user's spool file*/
#define USERS_SPOOL (strcmp(cur_folder, defaultfile) == 0)
/** some possible sort styles... **/
#define REVERSE - /* for reverse sorting */
#define SENT_DATE 1 /* the date message was sent */
#define RECEIVED_DATE 2 /* the date message was received */
#define SENDER 3 /* the name/address of sender */
#define SIZE 4 /* the # of lines of the message */
#define SUBJECT 5 /* the subject of the message */
#define STATUS 6 /* the status (deleted, etc) */
#define MAILBOX_ORDER 7 /* the order it is in the file */
/** some possible sort styles...for aliases **/
#define ALIAS_SORT 1 /* the name of the alias */
#define NAME_SORT 2 /* the actual name for the alias */
#define TEXT_SORT 3 /* the order of aliases.text */
#define LAST_ALIAS_SORT TEXT_SORT
/* some stuff for our own malloc call - pmalloc */
#define PMALLOC_THRESHOLD 256 /* if greater, then just use malloc */
#define PMALLOC_BUFFER_SIZE 2048 /* internal [memory] buffer size... */
/** the following macro is as suggested by Larry McVoy. Thanks! **/
# ifdef DEBUG
# define dprint(n,x) { \
if (debug >= n) { \
fprintf x ; \
fflush(debugfile); \
} \
}
# else
# define dprint(n,x)
# endif
/* some random structs... */
struct header_rec {
int lines; /** # of lines in the message **/
int status; /** Urgent, Deleted, Expired? **/
int index_number; /** relative loc in file... **/
int encrypted; /** whether msg has encryption **/
int exit_disposition; /** whether to keep, store, delete **/
int status_chgd; /** whether became read or old, etc. **/
long content_length; /** content_length in bytes from message header **/
long offset; /** offset in bytes of message **/
time_t received_time; /** when elm received here **/
char from[STRING]; /** who sent the message? **/
char to[STRING]; /** who it was sent to **/
char messageid[STRING]; /** the Message-ID: value **/
char time_zone[12]; /** incl. tz **/
time_t time_sent; /** gmt when sent for sorting **/
char time_menu[SHORT]; /** just the month..day for menu **/
time_t tz_offset; /** offset to gmt of time sent **/
char subject[STRING]; /** The subject of the mail **/
char mailx_status[WLEN];/** mailx status flags (RO...) **/
};
struct alias_rec {
int status; /* DELETED, TAGGED, VISIBLE, ... */
char *alias; /* alias name */
char *last_name; /* actual personal (last) name */
char *name; /* actual personal name (first last) */
char *comment; /* comment, doesn't show in headers */
char *address; /* non expanded address */
int type; /* mask-- sys/user, person/group */
long length; /* length of alias data on file */
};
struct addr_rec {
char address[NLEN]; /* machine!user you get mail as */
struct addr_rec *next; /* linked list pointer to next */
};
/*
* Filled in by "load_folder_state_file()". This allows an external program
* (e.g. "readmsg") to receive information on the current Elm state.
*/
struct folder_state {
char *folder_name; /* full pathname to current folder */
int num_mssgs; /* number of messages in the folder */
long *idx_list; /* index of seek offsets for messages */
int num_sel; /* number of messages selected */
int *sel_list; /* list of selected message numbers */
};
#ifdef SHORTNAMES /* map long names to shorter ones */
# include <shortname.h>
#endif
/** Let's make sure that we're not going to have any annoying problems with
int pointer sizes versus char pointer sizes by guaranteeing that every-
thing vital is predefined... (Thanks go to Detlev Droege for this one)
**/
#ifdef STRINGS
# include <strings.h>
#else
# if defined(_CONVEX_SOURCE) && defined(index)
# undef _CONVEX_SOURCE
# include <string.h> /* Now there is no proto for index. */
# define _CONVEX_SOURCE
# else
# include <string.h>
# endif
#endif
#ifndef STRSTR
char *strstr();
#endif
#ifdef I_LOCALE
#include <locale.h>
#endif
#ifdef I_NL_TYPES
#include <nl_types.h>
#else
#include "../hdrs/nl_types.h"
#endif
#ifndef USENLS
#define MCprintf printf
#define MCfprintf fprintf
#define MCsprintf sprintf
#endif
#ifdef POSIX_SIGNALS
#define signal posix_signal
#ifdef __STDC__
extern SIGHAND_TYPE (*posix_signal(int, SIGHAND_TYPE (*)(int)))(int);
#else /* __STDC__ */
extern SIGHAND_TYPE (*posix_signal())();
#endif /* __STDC__ */
#else /* POSIX_SIGNALS */
#ifdef SIGSET
#define signal sigset
#ifdef _AIX
extern SIGHAND_TYPE (*sigset(int sig, SIGHAND_TYPE (*func)(int)))(int);
#endif
#endif /* SIGSET */
#endif /* POSIX_SIGNALS */
char *argv_zero();
char *bounce_off_remote();
char *ctime();
char *error_description();
char *expand_system();
char *format_long();
char *get_alias_address();
char *get_arpa_date();
char *get_ctime_date();
char *get_date();
char *get_token();
char *getlogin();
char *level_name();
char *shift_lower();
char *strip_commas();
char *strip_parens();
char *strpbrk();
char *qstrpbrk();
char *strtok();
char *tail_of_string();
char *tgetstr();
char *pmalloc();
char *header_cmp();
long lseek();
long times();
long ulimit();
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.