home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume18 / mush6.4 / part01 / README < prev    next >
Text File  |  1989-03-12  |  15KB  |  320 lines

  1. /* @(#)README    2.5    (c) copyright 10/24/87    (Dan Heller) */
  2.  
  3. Author:
  4.     Dan Heller
  5.  
  6. Network addresses:
  7.     island!argv@sun.com        dheller@ucbcory.berkeley.edu
  8.     argv@garp.mit.edu
  9.  
  10. When sending mail, mail to the addresses in the order given.
  11.  
  12. Contained is the source for "Mail User's Shell" (MUSH), a "Mail User
  13. Agent" (MUA) that is designed to manage electronic mail on most UNIX
  14. systems.  That is, mush is used by users to read mail, sort it, edit
  15. it, delete it, or use it to act as an interface to send mail to others.
  16. A Mail Transport Agent (MTA) is the program which mush communicates with
  17. that actually -delivers- mail.
  18.  
  19. Redistribution of this code is permitted as long as all copyright notices
  20. remain intact and all other identifying notices remain in the code and
  21. in the binary.  This includes message headers on outgoing mail and the
  22. startup message.  Future releases will extract the release version from
  23. the message headers of mush-originated messages to aid in implementing
  24. features and providing backwards compatibility with previous versions.
  25.  
  26. With that out of the way...
  27.  
  28. Mush runs on various flavors of unix.  To build mush, you should identify
  29. which unix you are running:
  30.  
  31.     Sun (all versions from 2.0 and higher).
  32.     BSD (versions 4.2 and up)
  33.     System-V / Version 7 / System III (Bell Labs)
  34.     Xenix (this might be tricky)
  35.  
  36. You will need to copy "config.h-dist" to config.h and edit it to reflect
  37. the system dependencies described there.  These consist of "compile-time
  38. definitions and macros."
  39.  
  40. When it comes to "compile-time definitions", you may use one of two methods:
  41.  
  42.     #define DEFINITION    /* in the config.h file */
  43.     -DDEFINITION    /* in your makefile */
  44.  
  45. If the definition is of the form MACRO="string", then use:
  46.     -DMACRO=string
  47.     #define MACRO string
  48.  
  49. ---------------
  50. Which makefile to use:
  51.  
  52. If you are on a Sun Workstation:
  53.  
  54.     makefile.sun applies only to suns and creates a binary called "mush."
  55.     If the binary ends in "tool", then the graphics (suntools) mode will be
  56.     used by default on invocation. Otherwise, you must specify -t for
  57.     toolmode on sun workstations.  The SUNTOOL define must is in the
  58.     makefile.sun in order to compile the suntools version.  You don't need
  59.     to be running sunview; old sunwindows (2.0+) may be used.
  60.  
  61.     If you know that you're not going to use the suntools mode then you
  62.     should use makefile.bsd so that SUNTOOL won't be defined and unnecessary
  63.     files not be compiled so the binary will be made smaller.
  64.  
  65. If you are on a BSD UNIX machine:
  66.  
  67.     You should use the makefile.bsd makefile.
  68.  
  69. If you are using XENIX:
  70.  
  71.     The files makefile.x286 and makefile.x386 were created especially for
  72.     XENIX machines.  makefile.x286 is for Intel's 80286 processor and the
  73.     makefile.x386 is for the 80386 processor.  The xenix makefiles are
  74.     tuned for SCO's version of xenix.  This does not mean that it won't
  75.     work under other xenix versions -- however, some changes may have to
  76.     be made by hand.  If your xenix release is sco-xenix 2.2 or higher
  77.     then you must define USG. The libraries to use may be -ltinfo instead
  78.     of -lcurses -ltermlib.  This is because the curses package may use
  79.     termio instead of the sgtty data structure.  If you want to use termio
  80.     anyway, even if you're on an older xenix system (that supports termio),
  81.     then you may define USG anyway.
  82.  
  83. If you are on a system-v Bell labs machine:
  84.  
  85.     makefile.sys.v is for unix machines that are not running any flavor of
  86.     BSD and probably running a system-v flavor of unix -- this defines USG
  87.     so that termio will be used.
  88.  
  89. When you decide on an appropriate makefile, _copy_ it to a new file called
  90. Makefile.
  91. ---------------
  92.  
  93. Your Mail Transport Agent:
  94. Sendmail:
  95.     Mush was originally designed to use sendmail as the Mail Transport Agent.
  96.     However, other MTA's will work.  The MTA you use should be defined in
  97.     config.h under the MAIL_DELIVERY macro define. By default,
  98.         /usr/lib/sendmail -i
  99.     is used -- the option, -i, tells sendmail not to accept "." on a line
  100.     by itself as an end-of-file marker.  This has been bosleted by "-oi",
  101.     but "-i" still works and is backwards compatible with older sendmails.
  102.  
  103. Delivermail:
  104.     Some mailers such as delivermail and MMDF use special strings to separate
  105.     messages stored in a folder.  Older delivermail versions would use "^C".
  106.     Whatever your system uses, if it is NOT "From " (just the first 5 chars
  107.     on a line matching "From "), then this string should be defined in
  108.     config.h with the MSG_SEPARATOR macro.
  109.  
  110. MMDF:
  111.     NOTE: MMDF sites can define MMDF and not worry about MSG_SEPARATOR.  See
  112.     config.h-dist if you run MMDF.
  113.     Since MMDF can deliver users' mail in their home directories, there is
  114.     a new define to specify this option: -DHOMEMAIL
  115.     Since MMDF uses its own libraries to do file locking, you should add the
  116.     appropriate library to the LIBS list in your makefile.
  117.  
  118. All others:
  119.     Chances are, your MTA uses the "From " format to separate messges in
  120.     a folder.  This includes, /bin/mail, rmail, smail, execmail, and so on.
  121.     Unless you *know* otherwise, assume this to be the case with your MTA.
  122.  
  123.     If no MSG_SEPARATOR is specified, what mush looks for is a pattern of
  124.     From <string> <date format>
  125.     The "string" is usually the return address of the sender and the date
  126.     format is supposed to be in ctime(3) format.  Even still, some MTAs
  127.     don't conform completely to this standard and vary slightly in
  128.     implementation.  The function load_folder() (which reads in messages)
  129.     contains a scanf which looks for this format to verify that this is
  130.     indeed a new message being scanned.  If you install mush and find that
  131.     you are entering a shell, but mush indicates there are no messages in
  132.     the folder, it could be that you have a weird "From " line format and
  133.     the scanf() call needs to be either modified or removed.
  134.  
  135. #defines specifically for your MTA:
  136.  
  137. OLD_MAILER:
  138.     Some MTA's, especially older ones like /bin/mail or execmail (xenix), do
  139.     not conform to RFC822 and provide the required headers: From: and Date:.
  140.     To remedy, either #define OLD_MAILER in config.h or add the -D option
  141.     OLD_MAILER in the appropriate makefile: -DOLD_MAILER.  What this does is
  142.     make sure that there is a From: and Date: header in outgoing messages and
  143.     in folders (such as "set record").  Sendmail should not define this.
  144.  
  145. UUCP:
  146.     If your machine talks to other computers via uucp _and_ you have the
  147.     macro OLD_MAILER defined,  then you may want to define UUCP.  This will
  148.     change the From: line to have your return address look like "host!user"
  149.     rather than "user@host" (which is the default).  If you don't have
  150.     OLD_MAILER defined, this define does nothing.
  151.  
  152. NO_COMMAS:
  153.     If your mailer does *NOT* like commas between addresses (pre-3.0 smail,
  154.     xenix and sys-v machines), then you should define NO_COMMAS.  Otherwise,
  155.     you will get mailer-daemon [type] messages back when trying to send mail
  156.     to multiple users.  Sendmail should not define this.
  157.  
  158. VERBOSE_ARG:
  159.     If your mailer does NOT have a verbose option, then you should not have
  160.     VERBOSE_ARG defined.  Otherwise, define it to be whatever the verbose
  161.     argument is for your mailer.  The default is -v.
  162.  
  163. METOO:
  164.     Sendmail uses the -m argument to say, "metoo" -- when sending to mailing
  165.     lists, normally sendmail will send mail to mailing lists, but if you're
  166.     in that list, you are excluded from getting your own mail.  However, if
  167.     you have the variable metoo set with your variables, then the METOO
  168.     argument is passed to sendmail to say, "I know I'm on this mailing list,
  169.     but send me a copy of my message even tho I sent it."  For sendmail, this
  170.     is -m.  If your mailer uses something else, then define METOO_ARG in the
  171.     config.h file.  If you don't have it (sys-v), then this should not be
  172.     defined.
  173.  
  174. ---------------
  175. Signals:
  176. SIGRET:
  177.     When signals occur in unix, the program can identify a function to be
  178.     called whenever a specific signal interrupts the process.  That function
  179.     returns one of two types in unix: int and void.  Because the return value
  180.     of this function is always ignored, many unix systems are converting
  181.     their definition of this function from int to void.  Mush has a define:
  182.     SIGRET which defines what the function should return.
  183.  
  184.     By default, SIGRET is defined to be "int".
  185.  
  186.     SunOS4.0 and some system-v machines and some xenix machines should
  187.     define SIGRET to be void.  If you don't know, leave it alone.  If
  188.     you guess wrong, you will get compiler "warnings" on lines that read:
  189.     on_intr();
  190.     off_intr();
  191.  
  192. ---------------
  193.  
  194. VPRINTF:
  195.     This should be defined if your system has the vprintf functions. You
  196.     *have* these functions if you are running:
  197.     o system V
  198.     o xenix
  199.     o Sun release 3.0 or higher.
  200.     If you are still not sure, try the following command from your shell:
  201.  
  202.     % ar t /lib/libc.a | grep vprintf
  203.  
  204.     If you have it, you'll probably get something like
  205.     vprintf.o
  206.     vsprintf.o
  207.     as output.  If you don't have it, you won't have any output.  If your
  208.     main C-libraries are not in /lib/libc.a, then find where they are and
  209.     try the same command using that file.  BSD machines do not have vprintf().
  210.  
  211. ---------------
  212. The sprintf() function:
  213.     If you *know* your system's sprintf returns a char *, you can remove the
  214.     #define sprintf Sprintf
  215.     in strings.h.  Careful, not all BSD4.3 machines are alike!  If you don't
  216.     know for sure, don't change this define.
  217.  
  218. ---------------
  219. Regular expression defines:
  220.     If you have REGCMP, this should be defined so that you will use the
  221.     routines regcmp() and regex() as the regular expression composer/parser.
  222.     This is true for xenix and System-V Unix.
  223.     If you don't have REGCMP defined, then the routines re_comp() and re_exec()
  224.     are used (this is the default for mush).
  225.     
  226.     Note that some systems do not have either set of routines in the default
  227.     libraries.  You must find the library to use and add it to the list of
  228.     libraries to use.  If this is the case, your link will fail with the
  229.     errors that regex and re_comp are undefined functions.  Read your man
  230.     page for regex(3) to find where to locate those libraries.
  231.  
  232. ---------------
  233. The select() function call:
  234.     Mush uses select() to implement macros, mappings and bindings.  If your
  235.     system is a BSD system, then this is defined for you.  However, with the
  236.     advent of hybrid bsd/sys-v systems, you may not be able to set BSD, but
  237.     you know you still have select() --for such systems, define SELECT in
  238.     your makefile or in config.h.
  239.     Newer xenix machines have this as so some system-v machines.  If you don't
  240.     know, mush will use another function although not as optimum as select().
  241.  
  242. ---------------
  243. The default Mailrc startup file:
  244.     A default mailrc should be installed for new users.  UCB mail's default
  245.     Mailrc works but no mailrc works also. The location of the default
  246.     file should be defined in config.h.  To have no default mailrc, set the
  247.     default to /dev/null.
  248.     For sun systems, the default .mailrc (/usr/lib/Mailrc) does not work
  249.     very well because sun's Mail is not standard /usr/ucb/Mail.
  250.     For this reason, sun has not changed the default mailrc file and still
  251.     resides in /usr/lib/Mail.rc (note this has the "." whereas the other file
  252.     does not).  The default config.h-dist reflects this.
  253.  
  254.     There is a supplied Mushrc file with mush, but this is only intended to
  255.     be used as an example of how to make mush look like ucbMail.  This is a
  256.     _reduction_ in functionality and its usage is not encouraged.
  257.  
  258.     There is a Gnurc file which can aid in making mush's curses mode appear
  259.     to interact similar to gnu-emacs.
  260.  
  261. ---------------
  262. Help files:
  263.     The help files should be placed somewhere which is readable and accessible
  264.     by all. Failing to do so removes virtually the entire help facility's
  265.     ability to help anyone.  There is a help file (cmd_help) for command help
  266.     (e.g. "command -?"), and the tool_help is for the graphics mode (Sun
  267.     workstations only).  You should define where you want these files in
  268.     config.h so at runtime, they can be accessed without error.
  269.  
  270. ---------------
  271.  
  272. You should now be able to run make.
  273.  
  274. ---------------
  275. Maintenance:
  276.  
  277. If you want to use dbx or any other debugger, or to use your default tty
  278. driver, -e should be used as command line argument when you run the program.
  279. What this flag does is prevents your echo from being turned off and leaving
  280. cbreak off, thus, keeping your tty in a sane state.  This prevents the use
  281. of mappings and macros (map and map!).  However, curses mode will automatic-
  282. ally disable that mode.  The -e flag is highly discouraged.
  283.  
  284. If you have memory allocation checking and validation (sun 3.0+ ?) then
  285. define M_DEBUG in the makefile (main.c) and add the library
  286. /usr/lib/debug/malloc.o to the library list. Do this only if you are
  287. find bugs in the program and suspect memory allocation errors. main.c
  288. has the code which sets the debugging level according to the value of
  289. an environment variable.  Because malloc-debugging is so cpu intensive,
  290. the sunwindows program will get a SIGXCPU (cpu time limit exceeded)
  291. because of the large amount of opening and closing large pixrects and
  292. devices.  For this reason, SIGXPCPU is is caught in main.c.
  293.  
  294. The "warning" variable may be set (at runtime in your .mushrc or as
  295. a command: "set warning") to aid in finding runtime errors that aren't
  296. fatal.
  297.  
  298. If you ever get "Message N has bad date: <date string>" then note
  299. the FORMAT of that date and edit dates.c.  There are a number of
  300. "sscanf"s which you can see match known date formats.  Use them as
  301. examples and insert the new date format you have.
  302.  
  303. If you ever add new variables, be sure to add them in viewopts.c and the
  304. man page.
  305.  
  306. If Mush ever coredumps and you are suspicious about whether or not
  307. your folder (or spool directory) was removed.  Or, if you were editing
  308. a letter, you should check for the files .mushXXXXXX and .edXXXXXXX.
  309. Mush won't die without telling you that it's dying and it will ask if you
  310. want to save the .mushXXXXX file and if you actually want it to dump core.
  311. Note that if you run mush from .suntools and there is a core dump, it
  312. probably wants to do some IO with the console and may hang (not exit)
  313. because it doesn't know it can't talk to you.
  314.  
  315. Last attempted, mush passed lint with a small number of errors indicating
  316. that fflush, fclose and other similar functions returned values which
  317. were always ignored.  Sorry.  I did not attempt lint on the suntools mode.
  318. Curses doesn't lint very well, but even when you lint mush with CURSES
  319. defined, it only complains about the unused curses globals in curses.h.
  320.