diff -b -r -c mm2.7/src/config.h mm2.7-win32/src/config.h *** mm2.7/src/config.h Wed Nov 24 10:36:08 1993 --- mm2.7-win32/src/config.h Wed Aug 06 14:46:14 1997 *************** *** 22,27 **** --- 22,39 ---- #define AMIGA */ + #ifdef WIN32 + #define STDC_HEADERS + #define bcopy(a, b, c) memcpy(b, a, c) + #define index strchr + #define rindex strrchr + #define popen fopen + #define pclose fclose + #undef NEWLINE_CHAR /* WIN32 uses CRLF */ + #define NO_RLIMITS 1 + #undef RESET_PROGRAM + #endif + #ifdef AIX #define SYSV #endif *************** *** 60,66 **** #ifndef MICROSOFT #define MICROSOFT /* Make sure MICROSOFT gets defined */ #endif ! #ifndef MSDOS #define MSDOS /* A common symbol we can use for all DOS compilers */ #endif #endif --- 72,78 ---- #ifndef MICROSOFT #define MICROSOFT /* Make sure MICROSOFT gets defined */ #endif ! #if !defined(MSDOS) && !defined(WIN32) #define MSDOS /* A common symbol we can use for all DOS compilers */ #endif #endif *************** *** 159,165 **** #endif #endif ! #ifdef MSDOS #define PATH_SEPARATOR ';' #ifndef STDPATH #define STDPATH ".\\mailcap;\\mailcap" --- 171,177 ---- #endif #endif ! #if defined(MSDOS) || defined(WIN32) #define PATH_SEPARATOR ';' #ifndef STDPATH #define STDPATH ".\\mailcap;\\mailcap" diff -b -r -c mm2.7/src/metamail/codes.c mm2.7-win32/src/metamail/codes.c *** mm2.7/src/metamail/codes.c Mon Sep 20 09:13:22 1993 --- mm2.7-win32/src/metamail/codes.c Tue Jan 28 11:02:52 1997 *************** *** 391,397 **** putc(c1<<4 | c2, outfile); } } else { ! #ifdef MSDOS if (*s == '\n') putc('\r', outfile); /* insert CR for binary-mode write */ #endif --- 391,397 ---- putc(c1<<4 | c2, outfile); } } else { ! #if defined(MSDOS) || defined(WIN32) if (*s == '\n') putc('\r', outfile); /* insert CR for binary-mode write */ #endif diff -b -r -c mm2.7/src/metamail/metamail.c mm2.7-win32/src/metamail/metamail.c *** mm2.7/src/metamail/metamail.c Wed Feb 16 20:57:20 1994 --- mm2.7-win32/src/metamail/metamail.c Tue Sep 16 13:43:06 1997 *************** *** 32,38 **** extern char *mktemp(char *); #define WRITE_BINARY "w" #else /* BORLAND */ ! #ifdef MICROSOFT #include #include #include --- 32,38 ---- extern char *mktemp(char *); #define WRITE_BINARY "w" #else /* BORLAND */ ! #if defined(MICROSOFT) || defined (WIN32) #include #include #include *************** *** 56,61 **** --- 56,65 ---- #endif /* MICROSOFT */ #endif /* BORLAND */ + #ifdef WIN32 + #include + #endif + #ifdef SYSV #define LPRTEMPLATE "lp %s" #define LPRCOMMAND "lp" *************** *** 63,77 **** #define LPRTEMPLATE "lpr %s" #define LPRCOMMAND "lpr" #endif ! #ifdef MSDOS #define CATCOMMAND "cat" #define CATTEMPLATE "cat %s" #define METAMAIL "metamail" #define TMPFILE_NAME_SIZE 128 #define MAX_FILE_NAME_SIZE 128 #define WRITE_BINARY "wb" ! #else /* MSDOS */ ! #ifdef AMIGA extern char *MkRmScript(); #ifndef F_OK #define F_OK (0) --- 67,88 ---- #define LPRTEMPLATE "lpr %s" #define LPRCOMMAND "lpr" #endif ! ! #if defined(WIN32) ! #define CATCOMMAND "Type" ! #define CATTEMPLATE "Type %s" ! #define METAMAIL "metamail" ! #define TMPFILE_NAME_SIZE _MAX_PATH ! #define MAX_FILE_NAME_SIZE _MAX_PATH ! #define WRITE_BINARY "wb" ! #elif defined(MSDOS) #define CATCOMMAND "cat" #define CATTEMPLATE "cat %s" #define METAMAIL "metamail" #define TMPFILE_NAME_SIZE 128 #define MAX_FILE_NAME_SIZE 128 #define WRITE_BINARY "wb" ! #elif defined(AMIGA) extern char *MkRmScript(); #ifndef F_OK #define F_OK (0) *************** *** 82,88 **** #define TMPFILE_NAME_SIZE 50 #define MAX_FILE_NAME_SIZE 256 #define WRITE_BINARY "w" ! #else /* AMIGA */ extern char **environ, *gets(); #define CATCOMMAND "cat" #define CATTEMPLATE "cat %s" --- 93,99 ---- #define TMPFILE_NAME_SIZE 50 #define MAX_FILE_NAME_SIZE 256 #define WRITE_BINARY "w" ! #else extern char **environ, *gets(); #define CATCOMMAND "cat" #define CATTEMPLATE "cat %s" *************** *** 90,97 **** #define TMPFILE_NAME_SIZE 1000 #define MAX_FILE_NAME_SIZE 1000 #define WRITE_BINARY "w" ! #endif /* AMIGA */ ! #endif /* MSDOS */ #ifndef NO_RLIMITS #include --- 101,107 ---- #define TMPFILE_NAME_SIZE 1000 #define MAX_FILE_NAME_SIZE 1000 #define WRITE_BINARY "w" ! #endif #ifndef NO_RLIMITS #include *************** *** 116,121 **** --- 126,134 ---- static char *NoAskDefault = "text,text/plain,text/richtext"; static char *QuietDefault = CATCOMMAND; static char *tmproot=""; + #if defined(WIN32) + static char tempPath[_MAX_PATH]; + #endif struct MailcapEntry { char *contenttype; *************** *** 242,247 **** --- 255,262 ---- RestoreTtyState(); #if defined(MSDOS) || defined(AMIGA) exit(signum); + #elif defined(WIN32) + return(0); #else signal(signum, SIG_DFL); kill(getpid(), signum); *************** *** 301,315 **** { int retcode; modpath(AUXPATH); #ifndef MSDOS signal(SIGINT, cleanup); #ifndef AMIGA signal(SIGILL, cleanup); signal(SIGTRAP, cleanup); signal(SIGIOT, cleanup); signal(SIGFPE, cleanup); ! #ifndef LINUX signal(SIGEMT, cleanup); signal(SIGBUS, cleanup); #endif --- 316,339 ---- { int retcode; + if (DoDebug) { + int i; + + for(i = 0; i < argc; i++) { + printf("Argv[%2d] = \"%s\"\n", i, argv[i]); + } + } modpath(AUXPATH); #ifndef MSDOS signal(SIGINT, cleanup); #ifndef AMIGA signal(SIGILL, cleanup); + #if !defined(WIN32) signal(SIGTRAP, cleanup); signal(SIGIOT, cleanup); + #endif signal(SIGFPE, cleanup); ! #if !defined(LINUX) && !defined(WIN32) signal(SIGEMT, cleanup); signal(SIGBUS, cleanup); #endif *************** *** 320,327 **** --- 344,359 ---- #ifdef SIGXCPU signal(SIGXCPU, cleanup); #endif + tmproot = getenv("METAMAIL_TMPDIR"); + #if defined(WIN32) + if (!tmproot) { + GetTempPath(_MAX_PATH, tempPath); + tmproot = tempPath; + } + #else if (!tmproot) tmproot="/tmp"; + #endif mailheaders = getenv("MM_HEADERS"); if (mailheaders) { char *s; *************** *** 440,446 **** IsAlternative = strcmp(subtype, "alternative") ? 0 : 1; if (IsAlternative) { ! MkTmpFileName(NewSquirrelFile); WroteSquirrelFile = 0; } LineBuf = malloc(LINE_BUF_SIZE); --- 472,478 ---- IsAlternative = strcmp(subtype, "alternative") ? 0 : 1; if (IsAlternative) { ! GetFileName(NewSquirrelFile, tmproot); WroteSquirrelFile = 0; } LineBuf = malloc(LINE_BUF_SIZE); *************** *** 518,530 **** char Fname[MAX_FILE_NAME_SIZE], *suggestedname, SugBuf[MAX_FILE_NAME_SIZE]; FILE *fp; int ans = 0, octetstream, ecode=0; ! suggestedname = FindParam("name"); ! if (!suggestedname) { ! MkTmpFileName(SugBuf); suggestedname = SugBuf; ! } else if (suggestedname[0] == '"') { ! suggestedname=UnquoteString(suggestedname); ! } octetstream = ! lc2strcmp(ContentType, "application/octet-stream"); if (MightAskBeforeExecuting && !DefinitelyNotTty && !MustNotBeTty) { --- 550,559 ---- char Fname[MAX_FILE_NAME_SIZE], *suggestedname, SugBuf[MAX_FILE_NAME_SIZE]; FILE *fp; int ans = 0, octetstream, ecode=0; ! ! GetFileName(SugBuf, tmproot); suggestedname = SugBuf; ! octetstream = ! lc2strcmp(ContentType, "application/octet-stream"); if (MightAskBeforeExecuting && !DefinitelyNotTty && !MustNotBeTty) { *************** *** 556,570 **** fflush(stdout); fgets(Fname, sizeof(Fname), stdin); Fname[strlen(Fname) - 1] = '\0'; /* bogus newline */ - #if !defined(AMIGA) && !defined(MSDOS) if (!Fname[0]) strcpy(Fname, suggestedname); if (Fname[0] == '~' && Fname[1] == '/') { char Fname2[1000]; int uid = getuid(); struct passwd *p; p = getpwuid(uid); if (!p) { ! MkTmpFileName(Fname); printf("Cannot figure out what ~ means, using temporary file %s instead\n", Fname); } else { strcpy(Fname2, p->pw_dir); --- 585,599 ---- fflush(stdout); fgets(Fname, sizeof(Fname), stdin); Fname[strlen(Fname) - 1] = '\0'; /* bogus newline */ if (!Fname[0]) strcpy(Fname, suggestedname); + #if !defined(AMIGA) && !defined(MSDOS) && !defined(WIN32) if (Fname[0] == '~' && Fname[1] == '/') { char Fname2[1000]; int uid = getuid(); struct passwd *p; p = getpwuid(uid); if (!p) { ! strcpy(Fname, suggestedname); printf("Cannot figure out what ~ means, using temporary file %s instead\n", Fname); } else { strcpy(Fname2, p->pw_dir); *************** *** 607,638 **** } } } else { ! int ct = 0; ! char *slash = rindex(suggestedname, '/'); ! #ifdef AMIGA ! if (slash == NULL) { ! slash = rindex(suggestedname, ':'); ! } ! #endif ! if (slash) { ! ++slash; ! } else { ! slash = suggestedname; ! } ! do { ! if (ct) { ! #ifdef AMIGA ! sprintf(Fname, "T:%d-%s", ct, slash); ! } else { ! sprintf(Fname, "T:%s", slash); ! #else ! sprintf(Fname, "%s/%d-%s", tmproot, ct, slash); ! } else { ! sprintf(Fname, "%s/%s", tmproot, slash); ! #endif ! } ! ++ct; ! } while (access(Fname, F_OK) == 0); if (FileWriteOnly) { printf("\nThis message contains '%s`-format data.\n", ContentType); } else if (octetstream) { --- 636,642 ---- } } } else { ! GetFileName(Fname, tmproot); if (FileWriteOnly) { printf("\nThis message contains '%s`-format data.\n", ContentType); } else if (octetstream) { *************** *** 653,659 **** --- 657,669 ---- printf("Could not write file %s\n", Fname); } else { printf("Wrote file %s\n", Fname); + #if defined(WIN32) + if (!FileWriteOnly) { + printf("Trying to launch application by using file association\n"); + ExecuteByFileAssociation(Fname); } + #endif + } } if (!DefinitelyNotTty && MaybePageOutput && BoundaryCt > 0) PauseForUser(); return(ecode); *************** *** 780,785 **** --- 790,798 ---- case 'd': MightAskBeforeExecuting = 0; break; + case 'D': + DoDebug = 1; + break; case 'e': EatLeadingNewlines = 1; break; *************** *** 889,895 **** fprintf(stderr, "metamail: -z requires -f.\n"); usage(); } ! #if !defined(AMIGA) && !defined(MSDOS) if (!RunAsRootOK && (getuid() == 0 || geteuid() == 0)) { fprintf(stderr, "You can not run MetaMail as root unless you use -r or set MM_RUNASROOT.\n"); usage(); --- 902,908 ---- fprintf(stderr, "metamail: -z requires -f.\n"); usage(); } ! #if !defined(AMIGA) && !defined(MSDOS) && !defined(WIN32) if (!RunAsRootOK && (getuid() == 0 || geteuid() == 0)) { fprintf(stderr, "You can not run MetaMail as root unless you use -r or set MM_RUNASROOT.\n"); usage(); *************** *** 958,964 **** LineBuf = malloc(LINE_BUF_SIZE); if (!LineBuf) ExitWithError(nomem); /* Create it, ugh. Also needs to affect later command. */ ! MkTmpFileName(TmpName); DeleteSourceFileWhenDone = 1; fptmp = fopen(TmpName, WRITE_BINARY); if (!fptmp) ExitWithError("Can't open temporary file\n"); --- 971,977 ---- LineBuf = malloc(LINE_BUF_SIZE); if (!LineBuf) ExitWithError(nomem); /* Create it, ugh. Also needs to affect later command. */ ! GetFileName(TmpName, tmproot); DeleteSourceFileWhenDone = 1; fptmp = fopen(TmpName, WRITE_BINARY); if (!fptmp) ExitWithError("Can't open temporary file\n"); *************** *** 1178,1184 **** return(SaveSquirrelFile(SquirrelFile)); } else { char TmpFileName[TMPFILE_NAME_SIZE]; ! MkTmpFileName(TmpFileName); return(ExecuteMailcapEntry(mc, TmpFileName, ContentType)); } } --- 1191,1197 ---- return(SaveSquirrelFile(SquirrelFile)); } else { char TmpFileName[TMPFILE_NAME_SIZE]; ! GetFileName(TmpFileName, tmproot); return(ExecuteMailcapEntry(mc, TmpFileName, ContentType)); } } *************** *** 1368,1374 **** char *cmd, TmpFileName[TMPFILE_NAME_SIZE]; if (!mc->testcommand) return(1); ! MkTmpFileName(TmpFileName); cmd = malloc(CMDSIZE); if (!cmd) ExitWithError(nomem); BuildCommand(cmd, mc->testcommand, TmpFileName, NULL, NULL); --- 1381,1387 ---- char *cmd, TmpFileName[TMPFILE_NAME_SIZE]; if (!mc->testcommand) return(1); ! GetFileName(TmpFileName, tmproot); cmd = malloc(CMDSIZE); if (!cmd) ExitWithError(nomem); BuildCommand(cmd, mc->testcommand, TmpFileName, NULL, NULL); *************** *** 1688,1699 **** SetUpEnvironment(); } ! SetUpEnvironment() { int i, j, environsize; char **newenviron, *mailervar, *summaryvar, *ctypevar, *s; static char ttyenv[15], debugenv[15], *noaskenv, pagerenv[15], *quietenv, rootenv[25]; ! #if !defined(AMIGA) && !defined(MSDOS) /* Hack to make the code look similar for unix & dos */ #define putenv(var) newenviron[i++] = var; for (environsize=0; environ[environsize]; ++environsize) { --- 1701,1712 ---- SetUpEnvironment(); } ! SetUpEnvironment() { /* XXX - WIN32, this has to be rewritten for win32 */ int i, j, environsize; char **newenviron, *mailervar, *summaryvar, *ctypevar, *s; static char ttyenv[15], debugenv[15], *noaskenv, pagerenv[15], *quietenv, rootenv[25]; ! #if !defined(AMIGA) && !defined(MSDOS) && !defined(WIN32) /* Hack to make the code look similar for unix & dos */ #define putenv(var) newenviron[i++] = var; for (environsize=0; environ[environsize]; ++environsize) { *************** *** 1764,1770 **** putenv(rootenv); sprintf(pagerenv, "MM_USEPAGER=%d", MaybePageOutput); putenv(pagerenv); ! #if !defined(AMIGA) && !defined(MSDOS) for (j=0; jctype = newct; ! MkTmpFileName(TmpFileNameBuf); thispart->fname = malloc(1+strlen(TmpFileNameBuf)); if (!thispart->fname) ExitWithError(nomem); strcpy(thispart->fname, TmpFileNameBuf); --- 2198,2204 ---- } strcat(newct, "'"); thispart->ctype = newct; ! GetFileName(TmpFileNameBuf, tmproot); thispart->fname = malloc(1+strlen(TmpFileNameBuf)); if (!thispart->fname) ExitWithError(nomem); strcpy(thispart->fname, TmpFileNameBuf); *************** *** 2329,2335 **** default: ConsumeRestOfPart(OutputFP); } ! #if !defined(AMIGA) && !defined(MSDOS) if (UsingStandardInput && feof(InputFP) && !freopen("/dev/tty", "r", stdin)) { fprintf(stderr, "Warning: Cannot freopen /dev/tty to stdin"); } else InputFP = stdin; --- 2342,2348 ---- default: ConsumeRestOfPart(OutputFP); } ! #if !defined(AMIGA) && !defined(MSDOS) && !defined(WIN32) if (UsingStandardInput && feof(InputFP) && !freopen("/dev/tty", "r", stdin)) { fprintf(stderr, "Warning: Cannot freopen /dev/tty to stdin"); } else InputFP = stdin; *************** *** 2374,2380 **** } int HasSavedTtyState=0; ! #if !defined(AMIGA) && !defined(MSDOS) #ifdef SYSV static struct termio MyTtyStateIn, MyTtyStateOut; #else --- 2387,2393 ---- } int HasSavedTtyState=0; ! #if !defined(AMIGA) && !defined(MSDOS) && !defined(WIN32) #ifdef SYSV static struct termio MyTtyStateIn, MyTtyStateOut; #else *************** *** 2384,2390 **** SaveTtyState() { /* Bogus -- would like a good portable way to reset the terminal state here */ ! #if !defined(AMIGA) && !defined(MSDOS) #ifdef SYSV ioctl(fileno(stdin), TCGETA, &MyTtyStateIn); ioctl(fileno(stdout), TCGETA, &MyTtyStateOut); --- 2397,2403 ---- SaveTtyState() { /* Bogus -- would like a good portable way to reset the terminal state here */ ! #if !defined(AMIGA) && !defined(MSDOS) && !defined(WIN32) #ifdef SYSV ioctl(fileno(stdin), TCGETA, &MyTtyStateIn); ioctl(fileno(stdout), TCGETA, &MyTtyStateOut); *************** *** 2397,2403 **** } RestoreTtyState() { ! #if !defined(AMIGA) && !defined(MSDOS) #ifdef SYSV if (HasSavedTtyState) { ioctl(fileno(stdout), TCSETA, &MyTtyStateOut); --- 2410,2416 ---- } RestoreTtyState() { ! #if !defined(AMIGA) && !defined(MSDOS) && !defined(WIN32) #ifdef SYSV if (HasSavedTtyState) { ioctl(fileno(stdout), TCSETA, &MyTtyStateOut); *************** *** 2484,2509 **** return(0); } ! MkTmpFileName(name) ! char *name; { ! #ifdef AMIGA ! strcpy(name, "T:mmXXXXXX"); ! mktemp(name); ! #else ! #ifndef MSDOS ! sprintf(name, "%s/mm.XXXXXX", tmproot); ! mktemp(name); #else ! strcpy(name, "TXXXXXX"); ! if (!mktemp(name)) ! name[0] = 0; ! else ! if (DoDebug) printf("temp name = \"%s\"\n", name); #endif #endif } #ifdef AMIGA /* We need to execute a command and then remove a file "fileToRemove". * MkRmScript() creates a shell script that accomplishes this. The script --- 2497,2580 ---- return(0); } ! GetFileName(name, directory) ! char *name, *directory; { ! int count; ! char dir[MAX_FILE_NAME_SIZE]; ! char *s, *d, *suggestedName, *extension; ! FILE *fp; ! #if defined(MSDOS) || defined(WIN32) ! char pathSeparator = '\\'; ! #elif defined(AMIGA) ! char pathSeparator = ':'; #else ! char pathSeparator = '/'; #endif + + /* + * Put directory into canonical form. It must not end with a + * path separator. If no directory passed then set it + * to the current directory. + */ + if (!directory || !*directory) { + strcpy(dir, "."); + } else { + for(d = dir, s = directory; *s; d++, s++) *d = *s; + *d = 0; + for(d--; d >= dir && *d == pathSeparator; d--) *d = 0; + } + + suggestedName = FindParam("name"); + if (!suggestedName) { + suggestedName = "mmXXX"; + } else if (suggestedName[0] == '"') { + suggestedName=UnquoteString(suggestedName); + } + + /* + * Strip off any leading directory type strings, leave just basename. + * Because mime can be exchanged between UNIX and PC's we assume + * either a forward or a backward slash to be a separator, we do + * not base this on the current system we are running on. + * + * At the same time we look for the filename extension. We do this + * because if the file already exists we want to make a unique + * name by adding a number to the filename. We don't want to append + * the number to the filename because that destroys the extension + * which is critical to maintain, especially on PC's where applications + * rely on filename extensions to identify the file type. Prepending + * the number to the name is not desirable either because when you + * look at a sorted directory listing filenames that differ only by + * their number are not grouped together in order. What we want to do + * is add the number to the end of the basename, just before the extension. + */ + extension = NULL; + for (s = suggestedName; *s; s++); /* goto end of string */ + for (s--; s >= suggestedName; s--) { + if (*s == '.') {extension = s+1; *s = 0;} + if (*s == '/') {suggestedName = ++s; break;} + if (*s == '\\') {suggestedName = ++s; break;} + #ifdef AMIGA + if (*s == ':') {suggestedName = ++s; break;} #endif + } + + if (extension) { + sprintf(name, "%s%c%s.%s", dir, pathSeparator, suggestedName, extension); + } else { + sprintf(name, "%s%c%s", dir, pathSeparator, suggestedName); + } + for (count = 1; !access(name, F_OK); count++) { + if (extension) { + sprintf(name, "%s%c%s-%d.%s", dir, pathSeparator, suggestedName, count, extension); + } else { + sprintf(name, "%s%c%s-%d", dir, pathSeparator, suggestedName, count); + } + } } + #ifdef AMIGA /* We need to execute a command and then remove a file "fileToRemove". * MkRmScript() creates a shell script that accomplishes this. The script *************** *** 2517,2523 **** { FILE *script; ! MkTmpFileName(nameBuf); if ((script = fopen(nameBuf, "w")) == NULL) { fprintf(stderr, "Unable to open %s for writing\n", nameBuf); exit(1); --- 2588,2594 ---- { FILE *script; ! GetFileName(nameBuf, tmproot); if ((script = fopen(nameBuf, "w")) == NULL) { fprintf(stderr, "Unable to open %s for writing\n", nameBuf); exit(1); *************** *** 2680,2686 **** } StartRawStdin() { ! #if !defined(AMIGA) && !defined(MSDOS) #ifdef SYSV struct termio orterm, fterm; ioctl(0, TCGETA, &orterm); /* get current (i.e. cooked) termio */ --- 2751,2757 ---- } StartRawStdin() { ! #if !defined(AMIGA) && !defined(MSDOS) && !defined(WIN32) #ifdef SYSV struct termio orterm, fterm; ioctl(0, TCGETA, &orterm); /* get current (i.e. cooked) termio */ *************** *** 2712,2714 **** --- 2783,2862 ---- return (((stbuf.st_mode & S_IFMT) == S_IFDIR) ? 1 : 0); } + #if defined(WIN32) + int ExecuteByFileAssociation(LPTSTR cmd) + { + HINSTANCE result; + int errCode; + + result = ShellExecute( + HWND_DESKTOP, // handle to parent window + "open", // pointer to string that specifies operation to perform + cmd, // pointer to filename or folder name string + NULL, // pointer to string that specifies executable-file parameters + NULL, // pointer to string that specifies default directory + 0 // whether file is shown when opened + ); + errCode = (int) result; + if (errCode <= 32) { + LPTSTR errText; + TCHAR msg[1024]; + + /* + * Unfortunately FormatMessage cannot be used because these are + * not standard system error codes. + */ + + switch(errCode) { + case 0: + errText = "The operating system is out of memory or resources."; + break; + case ERROR_BAD_FORMAT: + errText = "The .EXE file is invalid (non-Win32 .EXE or error in .EXE image)."; + break; + case SE_ERR_ACCESSDENIED: + errText = "The operating system denied access to the specified file."; + break; + case SE_ERR_ASSOCINCOMPLETE: + errText = "The filename association is incomplete or invalid."; + break; + case SE_ERR_DDEBUSY: + errText = "The DDE transaction could not be completed because other DDE transactions were being processed."; + break; + case SE_ERR_DDEFAIL: + errText = "The DDE transaction failed."; + break; + case SE_ERR_DDETIMEOUT: + errText = "The DDE transaction could not be completed because the request timed out."; + break; + case SE_ERR_DLLNOTFOUND: + errText = "The specified dynamic-link library was not found."; + break; + case SE_ERR_FNF: + errText = "The specified file was not found."; + break; + case SE_ERR_NOASSOC: + errText = "There is no application associated with the given filename extension."; + break; + case SE_ERR_OOM: + errText = "There was not enough memory to complete the operation."; + break; + case SE_ERR_PNF: + errText = "The specified path was not found."; + break; + case SE_ERR_SHARE: + errText = "A sharing violation occurred."; + break; + default: + errText = "unknown error"; + break; + } + + wsprintf(msg, "%s\nError %d\n%s", cmd, errCode, errText); + fprintf(stderr, "%s\nError %d\n%s", cmd, errCode, errText); + MessageBox(NULL, msg, "metamail", (MB_OK | MB_ICONINFORMATION)); + return(FALSE); + } + return(TRUE); + } + #endif diff -b -r -c mm2.7/src/metamail/mmencode.c mm2.7-win32/src/metamail/mmencode.c *** mm2.7/src/metamail/mmencode.c Wed Jan 26 13:47:38 1994 --- mm2.7-win32/src/metamail/mmencode.c Tue Jan 28 11:04:22 1997 *************** *** 14,20 **** */ #include #include ! #ifdef MSDOS #include #endif --- 14,20 ---- */ #include #include ! #if defined(MSDOS) || defined(WIN32) #include #endif *************** *** 61,67 **** exit(-1); } } else { ! #ifdef MSDOS if (encode) fp = fopen(argv[i], "rb"); else --- 61,67 ---- exit(-1); } } else { ! #if defined(MSDOS) || defined(WIN32) if (encode) fp = fopen(argv[i], "rb"); else *************** *** 78,84 **** } } } ! #ifdef MSDOS if (fp == stdin) setmode(fileno(fp), O_BINARY); #endif /* MSDOS */ if (which == BASE64) { --- 78,84 ---- } } } ! #if defined(MSDOS) || defined(WIN32) if (fp == stdin) setmode(fileno(fp), O_BINARY); #endif /* MSDOS */ if (which == BASE64) { diff -b -r -c mm2.7/src/metamail/shared.c mm2.7-win32/src/metamail/shared.c *** mm2.7/src/metamail/shared.c Sun May 16 14:19:32 1993 --- mm2.7-win32/src/metamail/shared.c Wed Aug 06 14:45:52 1997 *************** *** 5,12 **** --- 5,18 ---- #include #include #endif + #if defined(WIN32) + #include + #endif + #if !defined(WIN32) extern char *malloc(); + #endif + char **Exceptions; int *NeedsPortableNewlines; int ExceptionsAlloced = 0, ExceptionsUsed = 0;