static char rcsid[] = "@(#)$Id: args.c,v 1.8 1999/03/24 14:03:57 wfp5p Exp $"; /******************************************************************************* * The Elm Mail System - $Revision: 1.8 $ $State: Exp $ * * Copyright (c) 1988-1995 USENET Community Trust * Copyright (c) 1986,1987 Dave Taylor ******************************************************************************* * Bug reports, patches, comments, suggestions should be sent to: * * Bill Pemberton, Elm Coordinator * flash@virginia.edu * ******************************************************************************* * $Log: args.c,v $ * Revision 1.8 1999/03/24 14:03:57 wfp5p * elm 2.5PL0 * * Revision 1.7 1997/10/20 20:24:30 wfp5p * Incomingfolders no longer set Magic mode on for all remaining folders. * * Revision 1.6 1996/05/09 15:51:16 wfp5p * Alpha 10 * * Revision 1.5 1996/03/14 17:27:52 wfp5p * Alpha 9 * * Revision 1.4 1996/03/13 14:37:57 wfp5p * Alpha 9 before Chip's big changes * * Revision 1.3 1995/09/29 17:41:59 wfp5p * Alpha 8 (Chip's big changes) * * Revision 1.2 1995/04/20 21:01:45 wfp5p * Added the showreply feature and emacs key bindings. * * Revision 1.1.1.1 1995/04/19 20:38:35 wfp5p * Initial import of elm 2.4 PL0 as base for elm 2.5. * ******************************************************************************/ /** starting argument parsing routines for ELM system... **/ #include "elm_defs.h" #include "elm_globals.h" #include "patchlevel.h" #include "s_elm.h" extern char *optarg; /* optional argument as we go */ extern int optind; /* argnum + 1 when we leave */ char * parse_arguments(argc, argv, to_whom) int argc; char *argv[], *to_whom; { char *bp; int i, len; static char req_mfile[SLEN]; opmode = OPMODE_READ; sendmail_verbose = FALSE; TreatAsSpooled = FALSE; to_whom[0] = '\0'; batch_subject = NULL; included_file = NULL; while ((i = getopt(argc, argv, "?acd:f:hi:kKMmr:Ss:tVvz")) != EOF) { switch (i) { case 'a' : arrow_cursor = TRUE; break; case 'c' : fprintf(stderr, catgets(elm_msg_cat, ElmSet, ElmUseCheckaliasInstead, "Error - the \"-c\" option is obsolete.\n\ Use the \"checkalias\" command instead\n")); exit(1); break; case 'd' : debug = atoi(optarg); break; case 'f' : strncpy(req_mfile, optarg, SLEN); break; case '?' : /*FALLTHRU*/ case 'h' : args_help(); case 'i' : included_file = optarg; opmode = OPMODE_SEND; break; case 'k' : /* obsolete - was HP terminal in 2.4 */ break; case 'K' : hp_softkeys = TRUE; break; case 'M' : TreatAsSpooled = TRUE; break; case 'm' : mini_menu = FALSE; break; case 'r' : setelmrcName(optarg);break; case 'S' : opmode = OPMODE_SEND; break; case 's' : batch_subject = optarg; opmode = OPMODE_SEND; break; case 't' : use_tite = FALSE; break; case 'V' : sendmail_verbose = TRUE; break; case 'v' : args_version(); case 'z' : opmode = OPMODE_READ_NONEMPTY; break; } } #ifndef DEBUG if (debug) fprintf(stderr, catgets(elm_msg_cat, ElmSet, ElmArgsIngoringDebug, "Warning: system created without debugging enabled - request ignored\n")); debug = 0; #endif /* address arguments indicate we are sending */ *(bp = to_whom) = '\0'; len = SLEN; for ( ; optind < argc ; ++optind) { i = strlen(argv[optind]); if (1+i+1 > len) { fprintf(stderr, catgets(elm_msg_cat, ElmSet, ElmArgsTooManyAddresses, "\n\rToo many addresses, or addresses too long!\n\r")); exit(1); } if (bp > to_whom) { *bp++ = ' '; --len; } (void) strcpy(bp, argv[optind]); bp += i; len -= i; opmode = OPMODE_SEND; } if (!isatty(STDIN_FILENO)) { if (opmode == OPMODE_SEND) { opmode = OPMODE_SEND_BATCH; if (batch_subject == NULL) batch_subject = DEFAULT_BATCH_SUBJECT; if (included_file != NULL) { fprintf(stderr, catgets(elm_msg_cat, ElmSet, ElmArgsInclFileBatch, "\n\rCan't specify an included file in batch mode!\n\r")); exit(1); } } else { fprintf(stderr, catgets(elm_msg_cat, ElmSet, ElmArgsNoFileBatch, "\n\rMust specify a recipient in batch mode.\n\r")); exit(1); } } return req_mfile; } args_help() { /** print out possible starting arguments... **/ fprintf(stderr, catgets(elm_msg_cat, ElmSet, ElmArgsHelp1, "\nPossible Starting Arguments for ELM program:\n\n\r\ \targ\t\t\tMeaning\n\r\ \t -a \t\tArrow - use the arrow pointer regardless\n\r\ \t -c \t\tCheckalias - check the given aliases only\n\r\ \t -dn\t\tDebug - set debug level to 'n'\n\r\ \t -fx\t\tFolder - read folder 'x' rather than incoming mailbox\n\r\ \t -h \t\tHelp - give this list of options\n\r\ \t -ix\t\tInclude prepared file 'x' in edit buffer for send\n\r")); fprintf(stderr, catgets(elm_msg_cat, ElmSet, ElmArgsHelp2, "\t -K \t\t- Enable use of HP 2622 softkeys\n\r\ \t -M \t\tMagic mode - treat all folders as spool files.\n\r\ \t -m \t\tMenu - Turn off menu, using more of the screen\n\r\ \t -S \t\tSend-only mode\n\r\ \t -sx\t\tSubject 'x' - for batch mailing\n\r\ \t -t \t\tTiTe - don't use termcap/terminfo ti/te entries.\n\r\ \t -V \t\tEnable sendmail voyeur mode.\n\r\ \t -v \t\tPrint out ELM version information.\n\r\ \t -z \t\tZero - don't enter ELM if no mail is pending\n\r\ \n\n")); exit(1); } args_version() { /** print out version information **/ printf("\nElm Version and Identification Information:\n\n"); printf("\tElm %s PL%s, of %s\n",VERSION,PATCHLEVEL,VERS_DATE); printf("\t(C) Copyright 1988-1999 USENET Community Trust\n"); printf("\tBased on Elm 2.0, (C) Copyright 1986,1987 Dave Taylor\n"); printf("\t----------------------------------\n"); printf("\tConfigured %s\n", CONFIGURE_DATE); printf("\t----------------------------------\n"); #ifdef MMDF printf("\tUse MMDF Mail Transport Agent/Mailbox Delimiters: MMDF\n"); #else /* MMDF */ printf("\tUse UNIX Mailbox Delimiters and %s Mail Transport Agent: not MMDF\n", mailer); #endif /* MMDF */ #ifdef DONT_ADD_FROM printf("\tLet the MTA add the From: header: DONT_ADD_FROM\n"); #else /* DONT_ADD_FROM */ printf("\tElm will add the From: header: not DONT_ADD_FROM\n"); #endif /* DONT_ADD_FROM */ printf("\tFollowing mail spool locking protocols will be used:"); #ifdef USE_DOTLOCK_LOCKING printf(" USE_DOTLOCK_LOCKING (.lock)"); #endif #ifdef USE_FLOCK_LOCKING printf(" USE_FLOCK_LOCKING"); #endif #ifdef USE_FCNTL_LOCKING printf(" USE_FCNTL_LOCKING"); #endif printf("\n"); #ifdef USE_EMBEDDED_ADDRESSES printf("\tFrom: and Reply-To: addresses are good: USE_EMBEDDED_ADDRESSES\n"); #else /* USE_EMBEDDED_ADDRESSES */ printf("\tFrom: and Reply-To: addresses ignored: not USE_EMBEDDED_ADDRESSES\n"); #endif /* USE_EMBEDDED_ADDRESSES */ #ifdef MIME_RECV printf("\tSupport Multipurpose Internet Mail Extensions: MIME_RECV\n"); #else /* MIME_RECV */ printf("\tIgnore Multipurpose Internet Mail Extensions: not MIME_RECV\n"); #endif /* MIME_RECV */ #ifdef INTERNET printf("\tPrefers Internet address formats: INTERNET\n"); #else /* INTERNET */ printf("\tInternet address formats not used: not INTERNET\n"); #endif /* INTERNET */ #ifdef DEBUG printf("\tDebug options are available: DEBUG\n"); #else /* DEBUG */ printf("\tNo debug options are available: not DEBUG\n"); #endif /* DEBUG */ printf("\tLib dir is: %s\n",system_help_dir); #ifdef CRYPT printf("\tCrypt function enabled: CRYPT\n"); #else /* CRYPT */ printf("\tCrypt function disabled: not CRYPT\n"); #endif /* CRYPT */ #ifdef ALLOW_MAILBOX_EDITING printf("\tMailbox editing included: ALLOW_MAILBOX_EDITING\n"); #else /* ALLOW_MAILBOX_EDITING */ printf("\tMailbox editing not included: not ALLOW_MAILBOX_EDITING\n"); #endif /* ALLOW_MAILBOX_EDITING */ #ifdef ALLOW_STATUS_CHANGING printf("\tStatus changing included: ALLOW_STATUS_CHANGING\n"); #else /* ALLOW_STATUS_CHANGING */ printf("\tStatus changing not included: not ALLOW_STATUS_CHANGING\n"); #endif /* ALLOW_STATUS_CHANGING */ #ifdef ALLOW_SUBSHELL printf("\tSubshell menu items included: ALLOW_SUBSHELL\n"); #else /* ALLOW_SUBSHELL */ printf("\tSubshell menu items not included: not ALLOW_SUBSHELL\n"); #endif /* ALLOW_SUBSHELL */ #ifdef HAS_SETEGID printf("\tUse setegid(): HAS_SETEGID\n"); #else printf("\tUse setgid(): not HAS_SETEGID\n"); #endif #ifdef ISPELL printf("\tSpell checking feature enabled: ISPELL\n"); printf("\t\t(Default spelling checker is %s options '%s')\n", ISPELL_PATH, ISPELL_OPTIONS); #else /* ISPELL */ printf("\tSpell checking feature disabled: not ISPELL\n"); #endif /* ISPELL */ #ifdef ENABLE_CALENDAR printf("\tCalendar file feature enabled: ENABLE_CALENDAR\n"); printf("\t\t(Default calendar file is %s)\n",dflt_calendar_file); #else /* ENABLE_CALENDAR */ printf("\tCalendar file feature disabled: not ENABLE_CALENDAR\n"); #endif /* ENABLE_CALENDAR */ printf("\n\n"); exit(1); }