john,
ed anselmo updated the old patches to 6.7.2 and i fixed the
lexedit.sed script for dtimep.c: aix 3.2 lex had added some more
junk.
there is these days probably more stuff that the sed script is
removing than the original authors had intended. however, if i
don't sed dtimep.c, it has some syntax errors; so the sed script is
still necessary.
when you patch these into the mainline code, i would say that you
don't need to ifdef the following:
+ #ifdef _AIX
+ case '\0':
+ #else
case NULL:
! #endif
simply replace incorrect NULL with the '\0'. also change all
occurrances of
#endif something
to
#endif /* something */
would you be kind enough to install these patches in
ftp.ics.edu:mh/updates/aix.mh-6.7.2? (if that's not where you put
it, please let me know where so i can update the faq correctly.)
--bw
Patches to MH 6.7.2 for IBM AIX 3.2
Bill Wohler
1. History: These patches were originally posted by Steven Lebowitz
<lebowits(_at_)nova(_dot_)bet(_dot_)ibm(_dot_)com> and I made some
modifications for
6.7.1. Ed Anselmo <anselmo(_at_)nic(_dot_)near(_dot_)net> and I modified
them to
work on MH 6.7.2 on AIX 3.2.
AIX support should appear in MH 6.7.3, which is planned to be
released by the end of '92.
2. To apply this patch:
cd to the top of the source tree and do:
patch -p1 -s < aix.mh-6.7.2
Patch will work silently unless an error occurs. You will likely
get the following warning messages, which can be ignored:
mkdir: cannot create config.
config: File exists
mkdir: cannot create sbr.
sbr: File exists
If you want to watch patch do its thing, leave out the "-s"
argument to patch.
Finally, to rebuild after applying this patch, do:
% cd conf
% make
% ./mhconfig MH
% cd ..
% make >& Makelog
% make inst-all
3. When installing new MH patches, back out these patches first (patch
-p1 -R -s < aix.mh-6.7.2).
4. my MH file:
bin /usr/local/bin/mh
ldoptions -s
manuals local
mts sendmail/smtp
options ATHENA BIND DBM ISI MHRC
options TYPESIG='void' SYS5 SYS5DIR SOCKETS
options MHE
curses -lcurses
sprintf int
5. fix permissions.
#! /bin/sh
# Run this script as root after installation on AIX systems.
# Otherwise slocal and inc will *not* work.
chgrp mail /usr/local/lib/mh/slocal /usr/local/bin/mh/inc
chmod g+s /usr/local/lib/mh/slocal /usr/local/bin/mh/inc
6. Please contact Bill Wohler <wohler(_at_)sap-ag(_dot_)de> if you have any
questions regarding these patches.
*** mh-6.7/conf/mhconfig.c Mon Jan 27 12:34:35 1992
--- mh-6.7.new/conf/mhconfig.c Thu Aug 6 15:18:19 1992
***************
*** 570,576 ****
}
break;
}
! if ((config = *vec++) == NULL || *vec != NULL)
adios (NULLCP, "usage: %s file", myname);
if ((fp = fopen (config, "r")) == NULL)
--- 570,576 ----
}
break;
}
! if ((config = *vec++) == NULL && *vec != NULL)
adios (NULLCP, "usage: %s file", myname);
if ((fp = fopen (config, "r")) == NULL)
*** mh-6.7/conf/config/mts.c Thu Feb 14 18:18:22 1991
--- mh-6.7.new/conf/config/mts.c Fri Aug 7 11:02:42 1992
***************
*** 43,49 ****
--- 43,51 ----
#define rindex strrchr
#endif SYS5
+ #ifndef _AIX
char *index (), *malloc (), *mktemp (), *rindex (), *strcpy ();
+ #endif
struct passwd *getpwuid ();
***************
*** 292,298 ****
--- 294,304 ----
grot ('t', '\t');
#undef grot
+ #ifdef _AIX
+ case '\0': s--;
+ #else
case NULL: s--;
+ #endif
case QUOTE:
*bp = QUOTE;
break;
*** mh-6.7/conf/config/mtstailor Thu Jun 15 16:10:12 1989
--- mh-6.7.new/conf/config/mtstailor Mon Jan 28 14:45:47 1991
***************
*** 1,4 ****
! mmdfldir: @(MHDROPATH)
! mmdflfil: @(MHDROPFIL)
hostable: @(MHETCPATH)/hosts
! servers: localhost \01localnet
--- 1,12 ----
! mmdfldir: /usr/mail
! mmdflfil:
! uucpldir: /usr/mail
! uucplfil:
! mmdelim1: \001\001\001\001\n
! mmdelim2: \001\001\001\001\n
! mmailid: 0
! umincproc:
! lockldir:
!
hostable: @(MHETCPATH)/hosts
! sendmail: /usr/local/lib/mail/local_sendmail
*** mh-6.7/config/version.sh Thu Jan 30 17:20:46 1992
--- mh-6.7.new/config/version.sh Fri Aug 7 11:09:50 1992
***************
*** 38,63 ****
rm -f version.c
! cat version ${Patch} |\
! awk -F. '
! BEGIN { split ("'"${1}"'", ver, ".");\
! major = ver[1]; minor = ver[2]; patch = ver[3]} \
! NR == 1 { local = $(NF) } ;\
! NR == 2 { patch = $(NF) } ;\
! END { local++;\
! if (patch > 0) {\
! printf "char *version = \"@(#)MH %s.%s.%s #%d[UCI] ", \
! major, minor, patch, local > "version.c"; \
! printf ".ds MH %s.%s.%s #%d[UCI]\n", \
! major, minor, patch, local > "../doc/version.rf"; \
! printf "MH %s.%s.%s #%d[UCI]\n", major, minor, patch, local ;\
! } else {\
! printf "char *version = \"@(#)MH %s.%s #%d[UCI] ", \
! major, minor, local > "version.c"; \
! printf ".ds MH %s.%s #%d[UCI]\n", \
! major, minor, local > "../doc/version.rf"; \
! printf "MH %s.%s #%d[UCI]\n", major, minor, local ;\
! }\
! printf "%s.%s.%s.%d\n", major, minor, patch, local > "_version";\
! }' && mv _version version
echo '('$LOCAL') of '`date`'";' >> version.c
--- 38,42 ----
rm -f version.c
! (echo $1; cat version ${Patch})|awk -F. -f version.awk && mv _version version
echo '('$LOCAL') of '`date`'";' >> version.c
*** /dev/null Sat Sep 12 15:01:35 1992
--- mh-6.7.new/config/version.awk Sat Sep 12 16:50:50 1992
***************
*** 0 ****
--- 1,20 ----
+ NR == 1 { major = $1; minor = $2; patch = $3 }
+ NR == 2 { local = $(NF) }
+ NR == 3 { patch = $(NF) }
+ END {
+ local++;
+ if (patch > 0) {
+ printf "char *version = \"MH %s.%s.%s #%d[UCI] ", \
+ major, minor, patch, local > "version.c";
+ printf ".ds MH %s.%s.%s #%d[UCI]\n", \
+ major, minor, patch, local > "../doc/version.rf";
+ printf "MH %s.%s.%s #%d[UCI]\n", major, minor, patch, local;
+ } else {
+ printf "char *version = \"MH %s.%s #%d[UCI] ", \
+ major, minor, local > "version.c";
+ printf ".ds MH %s.%s #%d[UCI]\n", \
+ major, minor, local > "../doc/version.rf";
+ printf "MH %s.%s #%d[UCI]\n", major, minor, local;
+ }
+ printf "%s.%s.%s.%d\n", major, minor, patch, local > "_version";
+ }
*** mh-6.7/h/local.h Thu Oct 29 17:56:18 1987
--- mh-6.7.new/h/local.h Thu Aug 6 15:35:06 1992
***************
*** 6,19 ****
#include <sys/param.h>
#endif BSD42
! #ifndef BSD42
#ifndef NDIR
#include <dir.h>
#else NDIR
#include <ndir.h>
#endif NDIR
! #else BSD42
#include <sys/dir.h>
! #endif BSD42
#include <sys/stat.h>
--- 6,23 ----
#include <sys/param.h>
#endif BSD42
! #ifndef _AUX_SOURCE
! #if !defined(BSD42) && !defined(_AIX)
#ifndef NDIR
#include <dir.h>
#else NDIR
#include <ndir.h>
#endif NDIR
! #else BSD42 || _AIX
#include <sys/dir.h>
! #endif BSD42 || _AIX
! #else _AUX_SOURCE
! #include <sys/dir.h>
! #endif _AUX_SOURCE
#include <sys/stat.h>
*** mh-6.7/h/mh.h Thu Jan 23 19:03:59 1992
--- mh-6.7.new/h/mh.h Thu Aug 6 15:36:26 1992
***************
*** 344,350 ****
/* miscellaneous */
! #if !defined(BSD42) && !defined(hpux) && !defined(ncr)
#define rename(f1,f2) (link (f1, f2) != NOTOK ? unlink (f1) : NOTOK)
#endif not BSD42
--- 344,350 ----
/* miscellaneous */
! #if !defined(BSD42) && !defined(hpux) && !defined(ncr) && !defined(_AIX)
#define rename(f1,f2) (link (f1, f2) != NOTOK ? unlink (f1) : NOTOK)
#endif not BSD42
*** mh-6.7/h/strings.h Thu Jan 23 18:16:49 1992
--- mh-6.7.new/h/strings.h Fri Aug 7 10:06:28 1992
***************
*** 5,17 ****
--- 5,20 ----
#define _STRINGS
#ifdef SYS5
+ #ifndef _AIX
#define index strchr
#define rindex strrchr
+ #endif !_AIX
#endif SYS5
char *index ();
char *mktemp ();
char *rindex ();
+ #ifndef _AIX
#ifndef SPRINTFTYPE
#ifndef ncr /* NCR compiler complains about re-declaration
*/
char *sprintf (); /* I guess this is the new standard */
***************
*** 29,34 ****
--- 32,38 ----
char *getenv ();
char *calloc (), *malloc (), *realloc ();
+ #endif !_AIX
#ifdef SYS5
#include <memory.h>
*** /dev/null Sat Sep 12 15:01:35 1992
--- mh-6.7.new/sbr/version.awk Sat Sep 12 16:50:51 1992
***************
*** 0 ****
--- 1,7 ----
+ NR == 1 { major = $1; minor = $2; patch = $3 }
+ NR == 2 { compile = $(NF) }
+ NR == 3 { if (major != $1) {major = $1; minor = 0};
+ if (minor != $2) {minor = $2; compile = 0}}
+ END { compile++;
+ printf "version: libmh %d.%d.%d\n", major, minor, compile;
+ printf "%d.%d.%d\n", major, minor, compile > "_version";}
*** mh-6.7/sbr/formatsbr.c Fri Jan 24 13:09:34 1992
--- mh-6.7.new/sbr/formatsbr.c Fri Aug 7 10:09:44 1992
***************
*** 96,103 ****
case '\n':
break;
case NULL:
! cp--; /* fall */
default:
*dp++ = *cp;
break;
--- 96,107 ----
case '\n':
break;
+ #ifdef _AIX
+ case '\0':
+ #else
case NULL:
! #endif
! cp--; /* fall */
default:
*dp++ = *cp;
break;
*** mh-6.7/sbr/makedir.c Thu Jan 23 18:12:50 1992
--- mh-6.7.new/sbr/makedir.c Thu Aug 6 16:17:02 1992
***************
*** 22,27 ****
--- 22,32 ----
#ifdef SYS5DIR
#include <sys/types.h>
#include <sys/stat.h>
+ #ifdef _AIX
+ #include <errno.h>
+ #include <sys/param.h>
+ #include <sys/access.h>
+ #endif
#endif SYS5DIR
extern int errno;
*** mh-6.7/sbr/path.c Tue Feb 6 16:09:03 1990
--- mh-6.7.new/sbr/path.c Fri Aug 7 11:35:48 1992
***************
*** 107,113 ****
--- 107,117 ----
for (cp = f; *cp;)
if (*cp == '/') {
switch (*++cp) {
+ #ifdef _AIX
+ case '\0':
+ #else
case NULL:
+ #endif
if (--cp > f)
*cp = NULL;
break;
*** mh-6.7/support/pop/popd.c Mon Apr 9 12:45:16 1990
--- mh-6.7.new/support/pop/popd.c Fri Aug 7 14:13:53 1992
***************
*** 27,32 ****
--- 27,35 ----
#ifdef SIGTSTP
#include <sys/resource.h>
#include <sys/wait.h>
+ #ifdef _AIX
+ #include <sys/m_wait.h>
+ #endif
#endif SIGTSTP
#include <netinet/in.h>
#include <netdb.h>
*** mh-6.7/support/pop/popsbr.c Mon Apr 9 12:45:18 1990
--- mh-6.7.new/support/pop/popsbr.c Mon Jan 28 19:01:07 1991
***************
*** 73,82 ****
--- 73,90 ----
case OK:
if (poprint)
fprintf (stderr, "<--- %s\n", response);
+ #ifndef _AUX_SOURCE
if (*response == '+'
&& command ("USER %s", user) != NOTOK
&& command ("%s %s", rpop ? "RPOP" : (pophack++, "PASS"),
pass) != NOTOK)
+ #else _AUX_SOURCE
+ if (*response == '+'
+ && command ("USER %s", user) != NOTOK
+ && command ("%s %s", rpop ? "RPOP" :
+ (pophack++ - pophack - atoi("1") + "PASS"),
+ pass) != NOTOK)
+ #endif _AUX_SOURCE
return OK;
if (*response != '+') {
(void) strcpy (buffer, response);
*** mh-6.7/uip/ali.c Thu Apr 5 19:03:56 1990
--- mh-6.7.new/uip/ali.c Fri Aug 7 11:47:09 1992
***************
*** 191,197 ****
--- 191,201 ----
pos += 2;
}
+ #ifdef _AIX
+ case '\0':
+ #else
case NULL:
+ #endif
break;
default:
*** mh-6.7/uip/aliasbr.c Thu Apr 5 19:03:33 1990
--- mh-6.7.new/uip/aliasbr.c Fri Aug 7 10:12:42 1992
***************
*** 152,158 ****
case ':': /* comment */
case ';':
case '#':
! case NULL:
continue;
}
--- 152,162 ----
case ':': /* comment */
case ';':
case '#':
! #ifdef _AIX
! case '\0':
! #else
! case NULL:
! #endif
continue;
}
***************
*** 180,186 ****
}
switch (*(pp = scanp (ap))) {
! case NULL: /* EOL */
(void) fclose (fp);
return AK_ERROR;
--- 184,194 ----
}
switch (*(pp = scanp (ap))) {
! #ifdef _AIX
! case '\0': /* EOL */
! #else
! case NULL: /* EOL */
! #endif
(void) fclose (fp);
return AK_ERROR;
*** mh-6.7/uip/bbc.c Thu Apr 5 19:02:56 1990
--- mh-6.7.new/uip/bbc.c Fri Aug 7 14:25:01 1992
***************
*** 21,26 ****
--- 21,29 ----
#include <sys/stat.h>
#ifdef SIGTSTP
#include <sys/wait.h>
+ #ifdef _AIX
+ #include <sys/m_wait.h>
+ #endif
#include <sys/time.h>
#include <sys/resource.h>
#endif SIGTSTP
*** mh-6.7/uip/msh.c Thu Apr 5 19:02:57 1990
--- mh-6.7.new/uip/msh.c Fri Aug 7 10:55:57 1992
***************
*** 1562,1568 ****
--- 1562,1572 ----
case '"':
for (;;) {
switch (c = *cp++) {
+ #ifdef _AIX
+ case '\0':
+ #else
case NULL:
+ #endif
padvise (NULLCP, "unmatched \"");
return NOTOK;
case '"':
*** mh-6.7/uip/mshcmds.c Thu Jan 23 17:58:19 1992
--- mh-6.7.new/uip/mshcmds.c Fri Aug 7 14:09:48 1992
***************
*** 39,45 ****
static int process();
/* SORTM */
static int msgsort (), subsort();
! static int getws ();
static char *sosmash ();
/* */
--- 39,45 ----
static int process();
/* SORTM */
static int msgsort (), subsort();
! static int local_getws ();
static char *sosmash ();
/* */
***************
*** 2502,2508 ****
Msgs[msgnum].m_scanl = NULL;
}
if (mp -> msgstats[msgnum] & SELECTED) {
! if (getws (datesw, subjsw, msgnum, &Msgs[msgnum]))
twscopy (&Msgs[msgnum].m_tb,
msgnum != mp -> lowsel ? &Msgs[msgnum - 1].m_tb : &tb);
}
--- 2502,2508 ----
Msgs[msgnum].m_scanl = NULL;
}
if (mp -> msgstats[msgnum] & SELECTED) {
! if (local_getws (datesw, subjsw, msgnum, &Msgs[msgnum]))
twscopy (&Msgs[msgnum].m_tb,
msgnum != mp -> lowsel ? &Msgs[msgnum - 1].m_tb : &tb);
}
***************
*** 2534,2544 ****
/* */
/*
! * getws - parse message, and get date and subject if needed. We'll use
* the msgp->m_tb tws struct for the date, and overload the msgp->m_scanl
* field with our subject string.
*/
! static int getws (datesw, subjsw, msgnum, msgp)
char *datesw,
*subjsw;
int msgnum;
--- 2534,2544 ----
/* */
/*
! * local_getws - parse message, and get date and subject if needed. We'll use
* the msgp->m_tb tws struct for the date, and overload the msgp->m_scanl
* field with our subject string.
*/
! static int local_getws (datesw, subjsw, msgnum, msgp)
char *datesw,
*subjsw;
int msgnum;
*** mh-6.7/uip/popsbr.c Mon Apr 9 12:47:26 1990
--- mh-6.7.new/uip/popsbr.c Mon Jan 28 18:47:26 1991
***************
*** 75,82 ****
--- 75,88 ----
fprintf (stderr, "<--- %s\n", response);
if (*response == '+'
&& command ("USER %s", user) != NOTOK
+ #ifndef _AUX_SOURCE
&& command ("%s %s", rpop ? "RPOP" : (pophack++, "PASS"),
pass) != NOTOK)
+ #else _AUX_SOURCE
+ && command ("%s %s", rpop ? "RPOP" :
+ (pophack++ - pophack - 1 + "PASS"),
+ pass) != NOTOK)
+ #endif _AUX_SOURCE
return OK;
if (*response != '+') {
(void) strcpy (buffer, response);
*** mh-6.7/uip/sortm.c Wed Dec 19 13:02:32 1990
--- mh-6.7.new/uip/sortm.c Fri Aug 7 14:10:40 1992
***************
*** 52,58 ****
int submajor = 0; /* if true, sort on subject-major */
int verbose;
! static getws();
static int dsort(), read_hdrs (), subsort(), txtsort();
static void rename_chain(), rename_msgs();
--- 52,58 ----
int submajor = 0; /* if true, sort on subject-major */
int verbose;
! static local_getws();
static int dsort(), read_hdrs (), subsort(), txtsort();
static void rename_chain(), rename_msgs();
***************
*** 295,301 ****
s = smsgs;
for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++) {
if (mp->msgstats[msgnum] & SELECTED) {
! if (getws (datesw, msgnum, s)) {
s->s_msg = msgnum;
s++;
}
--- 295,301 ----
s = smsgs;
for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++) {
if (mp->msgstats[msgnum] & SELECTED) {
! if (local_getws (datesw, msgnum, s)) {
s->s_msg = msgnum;
s++;
}
***************
*** 306,312 ****
}
static
! getws (datesw, msg, smsg)
register char *datesw;
int msg;
register struct smsg *smsg;
--- 306,312 ----
}
static
! local_getws (datesw, msg, smsg)
register char *datesw;
int msg;
register struct smsg *smsg;
*** mh-6.7/zotnet/bboards/getbbent.c Tue Aug 6 13:23:18 1991
--- mh-6.7.new/zotnet/bboards/getbbent.c Fri Aug 7 10:57:32 1992
***************
*** 646,652 ****
--- 646,656 ----
hp = item;
break;
+ #ifdef _AIX
+ case '\0':
+ #else
case NULL:
+ #endif
if ((cp = rindex (bb -> bb_file, '/')) == NULL || *++cp ==
NULL)
(void) strcpy (prf, ""), cp = bb -> bb_file;
else
*** mh-6.7/zotnet/mf/mf.c Thu Jan 30 17:40:38 1992
--- mh-6.7.new/zotnet/mf/mf.c Fri Aug 7 11:45:17 1992
***************
*** 810,816 ****
--- 810,820 ----
if (c == '(')
for (*bp++ = c, i = 0;;)
switch (c = *cp++) {
+ #ifdef _AIX
+ case '\0':
+ #else
case NULL:
+ #endif
cp = NULL;
return (last_lex = LX_ERR);
case QUOTE:
***************
*** 841,847 ****
if (c == '"')
for (*bp++ = c;;)
switch (c = *cp++) {
! case NULL:
cp = NULL;
return (last_lex = LX_ERR);
case QUOTE:
--- 845,855 ----
if (c == '"')
for (*bp++ = c;;)
switch (c = *cp++) {
! #ifdef _AIX
! case '\0':
! #else
! case NULL:
! #endif
cp = NULL;
return (last_lex = LX_ERR);
case QUOTE:
***************
*** 862,868 ****
if (c == '[')
for (*bp++ = c;;)
switch (c = *cp++) {
! case NULL:
cp = NULL;
return (last_lex = LX_ERR);
case QUOTE:
--- 870,880 ----
if (c == '[')
for (*bp++ = c;;)
switch (c = *cp++) {
! #ifdef _AIX
! case '\0':
! #else
! case NULL:
! #endif
cp = NULL;
return (last_lex = LX_ERR);
case QUOTE:
***************
*** 965,971 ****
--- 977,987 ----
pp = NULL;
return DONE;
+ #ifdef _AIX
+ case '\0':
+ #else
case NULL:
+ #endif
continue;
case '\n':
*** mh-6.7/zotnet/mts/lock.c Fri Jan 25 12:46:47 1991
--- mh-6.7.new/zotnet/mts/lock.c Fri Aug 7 11:42:26 1992
***************
*** 37,44 ****
--- 37,46 ----
#define NULLCP ((char *) 0)
#ifdef SYS5
+ #ifndef _AIX
#define index strchr
#define rindex strrchr
+ #endif
#endif SYS5
*** mh-6.7/zotnet/tws/lexedit.sed Thu Apr 5 19:06:01 1990
--- mh-6.7.new/zotnet/tws/lexedit.sed Fri Aug 7 11:04:40 1992
***************
*** 9,11 ****
--- 9,20 ----
} }
/^struct yysvf *yybgin = yysvec+1;$/d
/^int yylineno /,$d
+ /^# define YYTYPE short/c\
+ # define YYTYPE int
+ /^# define YYTYPE unsigned short/c\
+ # define YYTYPE int
+ /^unsigned char yymatch\[\] = {/c\
+ char yymatch[] = {
+ /^unsigned char yyextra\[\] = {/c\
+ char yyextra[] = {
+ /^if (__once_yylex) {$/,/if(yymbcurmax<=0) yymbcurmax=MB_CUR_MAX;$/d