home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Spezial
/
SPEZIAL2_97.zip
/
SPEZIAL2_97.iso
/
ANWEND
/
ONLINE
/
ELM23-2
/
ELM23-2.ZIP
/
hdrs
/
defs.h
< prev
next >
Wrap
C/C++ Source or Header
|
1993-09-09
|
12KB
|
389 lines
/* $Id: defs.h,v 4.1.1.2 90/06/05 21:23:19 syd Exp $ */
/*******************************************************************************
* The Elm Mail System - $Revision: 4.1.1.2 $ $State: Exp $
*
* Copyright (c) 1986, 1987 Dave Taylor
* Copyright (c) 1988, 1989, 1990 USENET Community Trust
*******************************************************************************
* Bug reports, patches, comments, suggestions should be sent to:
*
* Syd Weinstein, Elm Coordinator
* elm@DSI.COM dsinc!elm
*
*******************************************************************************
* $Log: defs.h,v $
* Revision 4.1.1.2 90/06/05 21:23:19 syd
* Fix other side of same problem
* From: Syd
*
* Revision 4.1.1.1 90/06/05 21:16:42 syd
* Try and avoid double definitions for the null
* macro for htonl when the system includes aready
* have it
* From: Syd
*
* Revision 4.1 90/04/28 22:42:06 syd
* checkin of Elm 2.3 as of Release PL0
*
*
******************************************************************************/
/** define file for ELM mail system. **/
#include "../config.h"
#include "sysdefs.h" /* system/configurable defines */
#ifdef OS2
#include "../os2/os2elm.h"
#endif
# define VERSION "2.3" /* Version number... */
# define VERS_DATE "May 1, 1990" /* for elm -v option */
# define WHAT_STRING \
"@(#) Version 2.3, USENET supported version, released May 1990"
#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 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() */
#define SH 0 /* defines for system_call */
#define USER_SHELL 1 /* to work correctly! */
#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]"
/** 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 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 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 == '?' ? 127 : c - 'A' + 1) /* control character mapping */
#define plural(n) n == 1 ? "" : "s"
#define lastch(s) s[strlen(s)-1]
/* 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 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 quote(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 f1 1
#define f2 2
#define f3 3
#define f4 4
#define f5 5
#define f6 6
#define f7 7
#define f8 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 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 date_rec {
int month; /** this record stores a **/
int day; /** specific date and **/
int year; /** time... **/
int hour;
int minute;
};
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 offset; /** offset in bytes of message **/
struct date_rec received; /** 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 dayname[8]; /** when the **/
char month[10]; /** message **/
char day[3]; /** was **/
char year[5]; /** sent **/
char time[NLEN]; /** to you! **/
char time_zone[12]; /** incl. tz */
long time_sent; /** gmt when sent for sorting **/
char subject[STRING]; /** The subject of the mail **/
char mailx_status[WLEN];/** mailx status flags (RO...) **/
};
struct alias_rec {
char name[NLEN]; /* alias name */
long byte; /* offset into data file for address */
};
struct lsys_rec {
char name[NLEN]; /* name of machine connected to */
struct lsys_rec *next; /* linked list pointer to next */
};
struct addr_rec {
char address[NLEN]; /* machine!user you get mail as */
struct addr_rec *next; /* linked list pointer to next */
};
#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
# include <string.h>
#endif
/*
* Macros for network/external number representation conversion.
* Note, some system include files already have htonl defined
* as this same macro, the ifndef should prevent conflicts.
*/
#ifdef NETWORK_ORDER
# ifndef ntohl
unsigned short ntohs(), htons();
unsigned long ntohl(), htonl();
# endif
#else
# ifndef ntohl
# define ntohl(x) (x)
# define ntohs(x) (x)
# define htonl(x) (x)
# define htons(x) (x)
# endif
#endif
char *argv_zero();
char *bounce_off_remote();
char *ctime();
char *error_description();
char *error_name();
char *error_number();
char *expand_address();
char *expand_domain();
char *expand_group();
char *expand_logname();
char *expand_system();
char *find_path_to();
char *format_long();
char *get_alias_address();
char *get_arpa_date();
char *get_ctime_date();
char *get_date();
char *get_token();
char *getenv();
char *getlogin();
char *level_name();
char *match_and_expand_domain();
char *shift_lower();
char *strip_commas();
char *strip_parens();
char *strpbrk();
char *strtok();
char *tail_of_string();
char *tgetstr();
char *pmalloc();
long lseek();
long times();
long ulimit();