This is main.c in view mode; [Download] [Up]
/* $Id: main.c,v 1.3 91/05/25 16:14:52 cap Exp $
* Trivial NeXTMail - send messages with attachments from non-NeXT machines.
* by Chris Paris (cap@cs.cmu.edu)
* This code is in the public domain.
*/
#include <stdio.h>
#ifndef USG
#include <sys/param.h>
#endif
#include "config.h"
#include "tnextmail.h"
#define TMP_TEMPLATE "/tmp/tnmXXXXXX"
char tmpdir_name[MAXPATHLEN];
char rtf_name[MAXPATHLEN];
char subject_buffer[1024];
char *message_subject = subject_buffer;
int rtfpos; /* printing characters in RTF output */
int fatalerrors; /* number of fatal errors */
extern char *mktemp();
main(argc, argv)
int argc;
char *argv[];
{
FILE *rtf_file;
extern char tar_uu_name[];
parseargs(argc, argv);
if (message_subject[0] == '\0' && isatty(fileno(stdin)))
ask_subject();
/* create the temporary directory in which everything goes */
strcpy(tmpdir_name, TMP_TEMPLATE);
mktemp(tmpdir_name);
if (mkdir(tmpdir_name, 0700) != 0) {
perror(tmpdir_name);
exit(1);
}
/* open the main RTF message file */
sprintf(rtf_name, "%s/%s", tmpdir_name, RTF_NAME);
if ((rtf_file = fopen(rtf_name, "w")) == NULL) {
perror(rtf_name);
exit(1);
}
rtf_start(rtf_file);
msgtortf(stdin, rtf_file);
rtf_end(rtf_file);
fclose(rtf_file);
check_file_access(); /* make sure all attachments are readable */
if (fatalerrors) {
cleanup(tmpdir_name, rtf_name, tar_uu_name);
if (fatalerrors == 1)
fprintf(stderr, "There was 1 fatal error, my friend.\n");
else
fprintf(stderr, "There were %d fatal errors, my friend.\n",
fatalerrors);
exit(fatalerrors);
}
batch_message(tmpdir_name);
mail_message(tmpdir_name);
cleanup(tmpdir_name, rtf_name, tar_uu_name);
exit(0);
}
/* parseargs - look for arguments on the command line */
parseargs(argc, argv)
int argc;
char *argv[];
{
extern char **tolist;
extern char *optarg;
extern int optind;
int c, errflg = 0;
while ((c = getopt(argc, argv, "s:")) != EOF)
switch (c) {
case 's':
message_subject = optarg;
break;
default:
errflg++;
}
if (optind == argc) /* no addressee specified */
errflg++;
if (errflg) {
fprintf(stderr, "Usage: %s [-s subject] to-addr ...\n", argv[0]);
exit(1);
}
tolist = &argv[optind];
}
/* cleanup - remove the temporary files we may have created */
cleanup(tmpdir_name, rtf_name, tar_uu_name)
char tmpdir_name[], rtf_name[], tar_uu_name[];
{
unlink(rtf_name);
unlink(tar_uu_name);
if (rmdir(tmpdir_name))
perror(tmpdir_name);
}
/* ask_subject - ask the user for a subject */
ask_subject()
{
int len;
printf("Subject: ");
fflush(stdout);
fgets(message_subject, sizeof subject_buffer - 1, stdin);
/* remove the \n */
if (len = strlen(message_subject))
message_subject[len - 1] = '\0';
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.