home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume6 / elm / part02 < prev    next >
Text File  |  1986-11-30  |  48KB  |  1,592 lines

  1. Subject: v06i027:  ELM mail system (elm), Part 02/14
  2. Newsgroups: mod.sources
  3. Approved: rs@mirror.UUCP
  4.  
  5. Submitted by: Dave Taylor <pyramid!hplabs!hpldat!taylor>
  6. Mod.sources: Volume 6, Issue 27
  7. Archive-name: elm/Part02
  8.  
  9. # Continuation of Shell Archive, created by hpldat!taylor
  10.  
  11. # This is part 2
  12.  
  13. # To unpack the enclosed files, please use this file as input to the
  14. # Bourne (sh) shell.  This can be most easily done by the command;
  15. #     sh < thisfilename
  16.  
  17.  
  18. if [ ! -d doc ]
  19. then
  20.   echo creating directory doc
  21.   mkdir doc
  22. fi
  23.  
  24. # ---------- file doc/readmsg.1 ----------
  25.  
  26. filename="doc/readmsg.1"
  27.  
  28. if [ -f $filename ]
  29. then
  30.   echo File \"$filename\" already exists\!  Skipping...
  31.   filename=/dev/null        # throw it away
  32. else
  33.   echo extracting file doc/readmsg.1...
  34. fi
  35.  
  36. cat << 'END-OF-FILE' > $filename
  37. .TH READMSG 1L
  38. .ad b
  39. .SH NAME
  40. readmsg - read messages from incoming mail
  41. .SH SYNOPSIS
  42. .B readmsg 
  43. [\fB-p\fR]
  44. [\fB-n\fR]
  45. [\fB-f filename\fR]
  46. [\fB-h\fR]
  47. .br
  48. .B readmsg
  49. [\fB-p\fR]
  50. [\fB-n\fR]
  51. [\fB-f filename\fR]
  52. [\fB-h\fR]
  53. number [number ...]
  54. .br
  55. .B readmsg 
  56. [\fB-p\fR]
  57. [\fB-n\fR]
  58. [\fB-f filename\fR]
  59. [\fB-h\fR]
  60. pattern
  61. .br
  62. .SH HP-UX COMPATIBILITY
  63. .TP 10
  64. Level:
  65. HP-UX/STANDARD
  66. .TP
  67. Origin:
  68. Hewlett-Packard
  69. .SH DESCRIPTION
  70. .I Readmsg
  71. is a program that gives the \fBElm\fR user the functionality of
  72. the mailx "~r" command from the editor of their choice.  There
  73. are three different ways of using the program;
  74. .P
  75. First off, if you're actually creating a reply to a message
  76. from within the \fBElm\fR system then \fIreadmsg\fR without any
  77. arguments will include a summary of the headers and the body 
  78. of the message being replied
  79. to.  If you aren't currently editing a message the program will
  80. return an error.
  81. .P
  82. Secondly, if you want to include certain messages, you can
  83. specify them by listing their ordinal locations in the 
  84. mail file (that is, their "message numbers")
  85. up to 25 at a time.  The \fImeta-\fRnumber '$' is understood to mean
  86. the last message in the mailfile.
  87. .P
  88. Finally, you can also specify a pattern that occurs in one of
  89. the messages as a way of including it.  This pattern can be
  90. typed in directly (no quotes) if the words are separated by a 
  91. single space in the actual message.  The pattern matching is case
  92. sensitive, so "Hello" and "hello" are NOT the same thing!!
  93. .sp
  94. .P
  95. The \fB-f\fR flag indicates that you'd rather use the file specified
  96. for the operations specified rather than the default mailbox (see
  97. the way \fBElm\fR implements printing multiple messages for more
  98. information on this...)
  99. .P
  100. The \fB-h\fR flag instructs the program to include the entire header
  101. of the matched message or messages when displaying their
  102. text.  (default is to display the From: Date: and Subject: lines
  103. only)
  104. .P
  105. The \fB-n\fR flag instructs the program to exclude \fIall\fR
  106. headers.  This is used mostly for extracting files mailed and
  107. such.
  108. .P
  109. Finally, the \fB-p\fR flag indicates that the program should
  110. put form-feeds (control-L) between message headers.
  111. .sp
  112. .SH "EXAMPLES"
  113. First off, to use this from within \fBvi\fR to include the text of the 
  114. current message at the end of the current message, you could
  115. use the command;
  116. .nf
  117.  
  118.     !!readmsg
  119.  
  120. .fi
  121. (as you hit the 'G' the editor will put you at the bottom of the screen
  122. with the '!' prompt).
  123. .sp 2
  124. Let's look at something more interesting, however;
  125. .sp
  126. Suppose you have the mailfile;
  127. .nf
  128.  
  129.    From joe Jun 3 1986 4:45:30 MST
  130.    Subject: hello
  131.    
  132.    Hey Guy!  Wanta go out and have a milk this evening?
  133.    
  134.    Joe
  135.    
  136.    From john Jun 3 1986 4:48:20 MST
  137.    Subject: Dinner at Eight
  138.    From: John Dinley <xyz!john>
  139.  
  140.    Remember you should show up about eight, okay?
  141.  
  142.            - John D -
  143.  
  144.    From xxzyz!cron Jun 3 1986 5:02:43 MST
  145.  
  146.    Cannot connect to server: blob
  147.    Job 43243 deleted from queue.
  148.    
  149. .fi
  150. The following commands will result in;
  151. .nf
  152.  
  153.   $ readmsg 2        
  154.   [ display the second message, from John ]
  155.  
  156.   $ readmsg         
  157.   [ an error, unless we're calling from \fBElm\fR ]
  158.  
  159.   $ readmsg BLOB    
  160.   [ no match - case sensitive! ]
  161.  
  162.   $ readmsg -h connect to server 
  163.   [ displays third message, including headers ]
  164.  
  165. .fi
  166. .SH FILES
  167. /usr/mail/<username>           The incoming mail
  168. .br
  169. $home/.readmsg            The temp file from \fBElm\fR
  170. .SH AUTHOR
  171. Dave Taylor, Hewlett-Packard Laboratories
  172. .SH SEE\ ALSO
  173. newmail(1L), Elm(1L)
  174. END-OF-FILE
  175.  
  176. if [ "$filename" != "/dev/null" ]
  177. then
  178.   size=`wc -c < $filename`
  179.  
  180.   if [ $size != 3454 ]
  181.   then
  182.     echo $filename changed - should be 3454 bytes, not $size bytes
  183.   fi
  184.  
  185.   chmod 644 $filename
  186. fi
  187.  
  188. # ---------- file doc/Elm.coversheet ----------
  189.  
  190. filename="doc/Elm.coversheet"
  191.  
  192. if [ -f $filename ]
  193. then
  194.   echo File \"$filename\" already exists\!  Skipping...
  195.   filename=/dev/null        # throw it away
  196. else
  197.   echo extracting file doc/Elm.coversheet...
  198. fi
  199.  
  200. cat << 'END-OF-FILE' > $filename
  201. .PH ""
  202. \"
  203. \"  Cover sheet for the ELM mail system...
  204. \"  format with 'troff -mm Elm.coversheet > Coversheet.fmtd'
  205. \"  or something similar.
  206. \"  (C) Copyright 1986 Dave Taylor
  207. \"
  208. .PF ""
  209. .ds HF 3  3 
  210. .ds HP 12 12
  211. .SA 1
  212. .nr Hy 1
  213. .nr Pt 1
  214. .nr Pi 8
  215. .lg 1
  216. .HM 1 1
  217. .rs
  218. .sp 11
  219. .ce 99
  220. .ps 25
  221. \fBThe \s26Elm\s25 Mail System\fR
  222. .sp 2
  223. .ps 14
  224. \fIA Replacement Mailer for All Unix Systems\fR
  225. .sp 8
  226. Dave Taylor
  227. .sp 2
  228. Hewlett-Packard Laboratories
  229. 1501 Page Mill Road
  230. Palo Alto CA
  231. 94304
  232. .sp 2
  233. email: taylor\s12@\s14hplabs \ or \ hplabs!taylor
  234. END-OF-FILE
  235.  
  236. if [ "$filename" != "/dev/null" ]
  237. then
  238.   size=`wc -c < $filename`
  239.  
  240.   if [ $size != 526 ]
  241.   then
  242.     echo $filename changed - should be 526 bytes, not $size bytes
  243.   fi
  244.  
  245.   chmod 666 $filename
  246. fi
  247.  
  248. # ---------- file doc/Config.guide ----------
  249.  
  250. filename="doc/Config.guide"
  251.  
  252. if [ -f $filename ]
  253. then
  254.   echo File \"$filename\" already exists\!  Skipping...
  255.   filename=/dev/null        # throw it away
  256. else
  257.   echo extracting file doc/Config.guide...
  258. fi
  259.  
  260. sed 's/^X//' << 'END-OF-FILE' > $filename
  261. X.PH ""
  262. X\"
  263. X\"  A guide to the configuration of the Elm mail system
  264. X\"  format with 'troff -mm Config.guide > Config.format'
  265. X\"  or something similar.
  266. X\"  (C) Copyright 1986 Dave Taylor
  267. X\"
  268. X\"  Last modification: April 25th, 1986
  269. X\"
  270. X.SA 1
  271. X.nr Hy 1
  272. X.nr Pt 1
  273. X.nr Pi 8
  274. X.lg
  275. X.HM 1 1
  276. X.rs
  277. X.ds HF 3  3
  278. X.ds HP 12 12 10 10 10
  279. X.PF ""
  280. X.ce 99
  281. X.sp 13
  282. X.ps 20
  283. X\fBElm Configuration Guide\fR
  284. X.sp 4
  285. X.ps 12
  286. X\fIHow to install and customize the Elm mailer\fR
  287. X.sp 2
  288. XDave Taylor
  289. X.sp
  290. XHewlett-Packard Laboratories
  291. X1501 Page Mill Road
  292. XPalo Alto CA
  293. X94304
  294. X.sp 
  295. Xemail: taylor@hplabs or hplabs!taylor
  296. X.sp 7
  297. X.ps 18
  298. X\fB\(co\fR\s12 Copyright 1986 by Dave Taylor
  299. X.ps 10
  300. X.SK
  301. X.sp 5
  302. X.ps 14
  303. X\fBElm Configuration Guide\fR
  304. X.PH "'Elm Configuration Guide''version 1.1'
  305. X.PF "''Page \\\\nP''"
  306. X.nr P 1
  307. X.sp
  308. X.ps 10
  309. X(version 1.1)
  310. X.sp 2
  311. XDave Taylor
  312. X.sp
  313. XHewlett-Packard Laboratories
  314. X1501 Page Mill Road
  315. XPalo Alto CA
  316. X94304
  317. X.sp 
  318. Xemail: taylor@hplabs or hplabs!taylor
  319. X.sp 2
  320. X\*(DT
  321. X.ce 0
  322. X.sp 3
  323. X.P
  324. XThis document is intended as a supplement to the \fIElm Users Guide\fR
  325. Xand is only of interest to those people at a site either installing
  326. Xor maintaining the source code to the \fBElm\fR mail system.
  327. X.sp 2
  328. X.P
  329. XThe first thing that needs to be decided when you're ready to install
  330. Xthe program is what sort of operating system you're running on...
  331. Xcurrently the choices are;
  332. X.VL 14 3
  333. X.LI "System V"
  334. XThis is the default configuration, and should work on all Bell 
  335. XSystem V Unix
  336. X.FS ' '
  337. X.br
  338. XUnix is a Trademark of AT&T Bell Laboratories.
  339. X.br
  340. XHP-UX and SPECTRUM are Trademarks of Hewlett-Packard Company.
  341. X.br
  342. XUTS is a Trademark of Amdahl Corporation.
  343. X.FE
  344. Xsystems, including HP-UX (and the \fISPECTRUM\fR series!) or simulations thereoXf.
  345. X.LI "BSD"
  346. XThis is for the Berkeley breed of Unix.
  347. X.LI "UTS"
  348. XThis is for the Amdahl version of Unix.
  349. X.LI "SUN"
  350. XThis is for the Sun workstations (This is a superset of the BSD
  351. Xdefinition as the Sun appears to have some major crises when it
  352. Xis asked to perform string functions and handed \fInull\fR addresses,
  353. Xas opposed to a \fIpointer\fR to a \fInull\fR...)
  354. X.LI "PYRAMID"
  355. XThis is for the Pyramid 90x machines (This is the same as the
  356. XBSD definition)
  357. X.LE
  358. X.sp
  359. XOnce you've decided which is appropriate, edit the Makefile file
  360. Xin the top level directory and alter the "DEFINE" there (about
  361. Xline 33 or so) accordingly.  (Note: also use the associated
  362. X"LIB2" define that's associated with each of the systems to ensure
  363. Xthat the program uses the correct libraries when linking together!)
  364. X.sp
  365. XAn analogous change should be made in the Makefile in 'src' and 'utils'
  366. Xtoo if you're planning on actually working on the programs rather than
  367. Xjust installing them...
  368. X.sp
  369. XWhile you're at it, if you happen to be running \fIACSNET\fR, then
  370. Xyou need to add the relevent define in the main Makefile and the
  371. XMakefile in directory `src' too!
  372. X.sp 2
  373. XOnce that's done, all of the other installation dependent definitions
  374. Xare contained in the file \fIhdrs/sysdefs.h\fR and are as follows;
  375. X.sp
  376. X.nf
  377. X.ce
  378. XContents of file \fIsysdefs.h\fR
  379. X.ce
  380. X-------------------------------------------------------------------------------X------
  381. X
  382. X/**            sysdefs.h                       **/
  383. X
  384. X/**  System level, configurable, defines for the ELM mail system.  **/
  385. X
  386. X/**  (C) Copyright 1986 Dave Taylor                                **/
  387. X
  388. X/** define the following if you think that the information in messages
  389. X    that have "Reply-To:" and/or "From:" fields with addresses will
  390. X    contain valid addressing information.  If this isn't defined, the
  391. X    calculated return address will ALWAYS be used instead.  (note that
  392. X    this doesn't necessarily preclude the use of G)roup replies).
  393. X
  394. X#define USE_EMBEDDED_ADDRESSES    
  395. X
  396. X**/
  397. X
  398. X#define FIND_DELTA    10        /* byte region where the binary search
  399. X                       on the path alias file is fruitless 
  400. X                                           (can't be within this boundary)    *X/
  401. X
  402. X#define MAX_HEADERS    500    /* max number of messages in one file!   */    
  403. X#define MAX_SALIASES    503    /* number of system aliases allowed      */
  404. X#define MAX_UALIASES    251    /* number of user aliases allowed      */
  405. X#define MAX_IN_WEEDLIST 50    /* max headers to weed out               */
  406. X
  407. X#define MAX_HOPS    35    /* max hops in return addr to E)veryone  */
  408. X
  409. X#define MAX_ATTEMPTS    6    /* #times to attempt lock file creation */
  410. X
  411. X/** see leavembox.c to determine if this should be defined or not....The 
  412. X    default is to NOT have it defined.
  413. X
  414. X#define REMOVE_AT_LAST
  415. X
  416. X**/
  417. X
  418. X#define DEFAULT_BATCH_SUBJECT  "no subject (file transmission)"
  419. X
  420. X/** If you want to have the mailer know about valid mailboxes on the
  421. X    host machine (assumes no delivery agent aliases) then you should
  422. X    undefine this (the default is to have it defined)...
  423. X
  424. X**/
  425. X
  426. X#define NOCHECK_VALIDNAME
  427. X
  428. X/** If your machine doesn't have virtual memory (specifically the vfork() 
  429. X    command) then you should define the following....        
  430. X
  431. X#define NO_VM
  432. X
  433. X**/
  434. X
  435. X/** If you want the mailer to check the pathalias database BEFORE it
  436. X    looks to see if a specified machine is in the L.sys database (in
  437. X    some cases routing is preferable to direct lines) then you should
  438. X    define the following...
  439. X
  440. X#define LOOK_CLOSE_AFTER_SEARCH
  441. X
  442. X**/
  443. X
  444. X/** If you'd rather the program automatically used the 'uuname' command
  445. X    to figure out what machines it talks to (instead of trying to get
  446. X    it from L.sys first) then define the following...
  447. X
  448. X#define USE_UUNAME
  449. X
  450. X**/
  451. X
  452. X/** If you'd like "newmail" to automatically go into background when you
  453. X    start it up (instead of the "newmail &" junk with the process id output,
  454. X    then define the following...
  455. X
  456. X#define AUTO_BACKGROUND
  457. X
  458. X**/
  459. X
  460. X/** If you'd rather your mail transport agent (ie sendmail) put the From:
  461. X    line into the message, define the following...
  462. X
  463. X**/
  464. X
  465. X#define DONT_ADD_FROM
  466. X
  467. X/** 
  468. X**/
  469. X
  470. X/** If your machine prefers the Internet notation of user@host for the
  471. X    From: line and addresses, define the following...(the default is to 
  472. X    use this rather than the USENET notation - check your pathalias file!)
  473. X
  474. X**/
  475. X#define INTERNET_ADDRESS_FORMAT
  476. X
  477. X/**
  478. X**/
  479. X
  480. X/** If you're on a machine that prefers UUCP to Internet addresses, then
  481. X    define the following (the basic change is that on a machine that
  482. X    receives messages of the form <path>!user@<localhost> the displayed
  483. X    address will be <path>!user instead of user@<localhost>.
  484. X
  485. X    BOGUS_INTERNET is the localhost address that is appended to the
  486. X    mail.  The algorithm is simply to see if the given address has
  487. X    at least two machines indicated, and if so to completely strip
  488. X    off the bogus-internet address.   This is horrible.  *sigh*
  489. X**/
  490. X
  491. X#define PREFER_UUCP
  492. X#define BOGUS_INTERNET    "@hplabs.HP.COM"
  493. X
  494. X/**
  495. X**/
  496. X
  497. X/** If you're running ACSNET and/or want to have your domain name
  498. X    attached to your hostname on outbound mail then you can define
  499. X    the following (default are not defined)
  500. X
  501. X#define USE_DOMAIN
  502. X#define DOMAIN        "<enter your domain here>"
  503. X
  504. X**/
  505. X
  506. X/** If you are going to be running the mailer with setgid mail (or
  507. X    something similar) you'll need to define the following to ensure
  508. X    that the users mailbox in the spool directory has the correct
  509. X    group (NOT the users group)
  510. X**/
  511. X
  512. X#define SAVE_GROUP_MAILBOX_ID
  513. X
  514. X/**
  515. X**/
  516. X
  517. X/** If you want a neat feature that enables scanning of the message
  518. X    body for entries to add to the users ".calendar" (or whatever)
  519. X    file, define this.
  520. X**/
  521. X
  522. X#define ENABLE_CALENDAR
  523. X#define dflt_calendar_file    "calendar"    /* in HOME directory */
  524. X
  525. X/**
  526. X**/
  527. X.fi
  528. X.TS
  529. Xl l l.
  530. X#define    NOTES_HEADER    "/***** "
  531. X#define    NOTES_FOOTER    "/* ---------- */"
  532. X.TE
  533. X.nf
  534. X
  535. X.fi
  536. X.TS
  537. Xl l l.
  538. X#ifdef BSD
  539. X#  define    system_hash_file    "/usr/spool/mail/.alias_hash"
  540. X#  define    system_data_file    "/usr/spool/mail/.alias_data"
  541. X#else
  542. X#  define    system_hash_file    "/usr/mail/.alias_hash"
  543. X#  define    system_data_file    "/usr/mail/.alias_data"
  544. X#endif
  545. X.TE
  546. X.sp
  547. X.TS
  548. Xl l l.
  549. X#define    pathfile    "/usr/lib/nmail.paths"
  550. X#define    domains    "/usr/lib/domains"
  551. X
  552. X#define    Lsys    "/usr/lib/uucp/L.sys"
  553. X.TE
  554. X.nf
  555. X
  556. X/** where to put the output of the elm -d command... (in home dir) **/
  557. X.fi
  558. X.TS
  559. Xl l l.
  560. X#define    DEBUG    "ELM:debug.info"
  561. X
  562. X#define    temp_file    "/tmp/snd."
  563. X#define    temp_mbox    "/tmp/mbox."
  564. X#define    temp_print    "/tmp/print."
  565. X#define    mailtime_file    ".last_read_mail"
  566. X#define    readmsg_file    ".readmsg"
  567. X#define    signature_file    ".signature"
  568. X.TE
  569. X.nf
  570. X
  571. X.fi
  572. X.TS 
  573. Xl l l.
  574. X#ifdef BSD
  575. X#  define    default_editor    "/usr/ucb/vi"
  576. X#  define    mailhome    "/usr/spool/mail/"
  577. X#  define    default_pager    "/usr/ucb/page"
  578. X#else
  579. X#  define    default_editor    "/usr/bin/vi"
  580. X#  define    mailhome    "/usr/mail/"
  581. X#  define    default_pager    "/usr/bin/more"
  582. X#endif
  583. X.TE
  584. X.sp
  585. X.TS
  586. Xl l l.
  587. X#define    sendmail    "/usr/lib/sendmail"
  588. X#define    smflags        "-oi"
  589. X#define    mailer    "/bin/rmail"
  590. X#define    mailx    "/usr/bin/mailx"
  591. X
  592. X#define    cutfile        "/usr/local/bin/cutfile"
  593. X
  594. X#define    helphome    "/usr/local/lib"
  595. X#define    helpfile    "elm-help.main"
  596. X
  597. X#define    elmrcfile    "/.elmrc"
  598. X#define    mailheaders    ".elmheaders"
  599. X#define    unedited_mail    "emergency.mbox"
  600. X#define    newalias    "newalias -q 1>&2 > /dev/null"
  601. X#define    readmsg        "readmsg"
  602. X#define    printmail    "printmail"
  603. X
  604. X#define    remove    "/bin/rm -f"        /* how to remove a file */
  605. X#define    cat    "/bin/cat"          /* how to display files */
  606. X#define    uuname    "uuname"            /* how to get a uuname  */
  607. X.TE
  608. X.ce
  609. X-------------------------------------------------------------------------------X------
  610. X.sp
  611. X.VL 15 0
  612. X.LI "USE_EMBEDDED_ADDRESSES"
  613. XThis controls the mailers response to messages that contain 
  614. X"Reply-To:" or "From:" lines that actually contain a return
  615. Xaddress.  If it's defined, the mailer will attempt to use
  616. Xthe address specified (overriding the return address built from the path that
  617. Xthe mail took).  It will look the address up in the pathalias
  618. Xdatabase (see the documentation on the alias system) for 
  619. Xincomplete paths, but it is still recommended that this be left
  620. Xundefined.  
  621. X.P
  622. XThis will, of course, make the mailer not be a standard 'RFC-822' 
  623. Xmailer, since the mail system is defined to use the reply-to
  624. Xif included rather than the return address, but, at least for
  625. Xaddresses on the Internet, it ain't going to work a lot of the time!
  626. X.LI "FIND_DELTA"
  627. XThis is the delta that the binary search of the pathalias database
  628. Xwill use to determine when it's slicing up a single line, rather than
  629. Xa multitude of lines.   Ideally, this should be set to 1 byte less
  630. Xthan the shortest line in the file...the default is 10 bytes.
  631. X.LI MAX_HEADERS 
  632. XThe maximum number of messages allowed in a single mailbox.
  633. X.LI MAX_SALIASES        
  634. XThe number of system aliases allowed.  (It is recommended that
  635. Xthis be a prime number to improve the performance of the 
  636. Xhashing function (it's a complicated proof!))
  637. X.LI MAX_UALIASES
  638. XThe number of user aliases allowed.  (should be a prime number -
  639. Xsee the comment above)
  640. X.LI MAX_IN_WEEDLIST 
  641. XThe maximum number of headers that can be specified in the weedout
  642. Xlist of the .elmrc file.  A suggested alternative approach if this
  643. Xnumber is too small is to specify initial substrings in the file
  644. Xrather than increasing the number.  For example, say you want to 
  645. Xweedout the headers "Latitude:" and "Latitudinal-Coords:", you
  646. Xcould simply specify "Latitud" and match them both!  Furthermore
  647. Xyou could also specify headers like "X-" and remove all the user
  648. Xdefined headers!
  649. X.LI MAX_HOPS
  650. XWhen replying to a G)roup, this is the maximum number of hops that
  651. Xa message can have taken.  This is used to try to optimize the 
  652. Xreturn address (remove cyclic loops and so on) and regular use
  653. Xshould show that the default of 35 is plenty more than you'll
  654. Xever need!
  655. X.LI MAX_ATTEMPTS
  656. XWhen reading in the default mailbox (\fI/usr/mail/$username\fR) the mailer
  657. Xcreates a file called \fI/usr/mail/$username.lock\fR to ensure that no
  658. Xmail is added to the file while it's being either read, or replaced
  659. X(ie written to).  Occasionally, this lock file will already be in
  660. Xplace since someone is currently sending you mail.  If this occurs,
  661. Xthe mailer will wait a few seconds and try to create the lock file
  662. Xagain.  This parameter defines the number of tries the mailer should
  663. Xtake before giving up.
  664. X.LI REMOVE_AT_LAST
  665. XWhen it does decide to give up after trying to create the lock file,
  666. X(see MAX_ATTEMPTS, above) this will define how to act.  If it's 
  667. Xdefined, the mailer will attempt to remove the lock file after the
  668. XMAX_ATTEMPTS timeout.  On the other hand, if it's not defined (the
  669. Xrecommended state) it'll simply quit the mailer, telling the user
  670. Xto try again in a few minutes.
  671. X.LI DEFAULT_BATCH_SUBJECT
  672. XWhat the subject should be on messages that are from redirected input
  673. Xbut don't have a subject specified...
  674. X.LI NOCHECK_VALIDNAME
  675. XThis disables the checking of validnames on the existing machine.
  676. XOn machines that run a system such as \fIsendmail\fR and use the
  677. Xsendmail alias feature, this should be defined.  On other systems
  678. Xthis should be left as the default (not defined) to avoid users
  679. Xgenerating \fIdead.letter\fR files...
  680. X.LI NO_VM
  681. XThis disables the calls to "vfork()" and replaces them will calls
  682. Xto "fork()".  On machines where vfork() is available, this should
  683. Xbe left undefined, as the virtual call is considerably faster (and
  684. Xis only used when the spawned process doesn't need ALL the stuff
  685. Xfrom the calling process!)
  686. X.LI LOOK_CLOSE_AFTER_SEARCH
  687. XSome systems are set up in such a way as to have direct connections
  688. Xto machines, but to have multi-machine hops be preferable for
  689. Xrouting messages to/through that machine (an example is a connection
  690. Xto "nbires" for the monthly mod.map information, but only connected
  691. Xto once a month!).  If this option is defined, then the system will
  692. Xtry to find a suitable path to the machine \fIbefore\fR it checks
  693. Xagainst the \fIL.sys/uuname\fR list of systems that it can connect to.
  694. X.LI USE_UUNAME
  695. XThe mailer tries to get the list of machines that's its connected
  696. Xto by looking in the \fIL.sys\fR file.  If it fails usually, it will
  697. Xthen try to do a \fIuuname\fR command and then read the output of
  698. Xthat command.  If this is defined, however, it will skip the \fIL.sys\fR
  699. Xreading and immediately try the \fIuuname\fR call.
  700. X.LI AUTO_BACKGROUND
  701. XIf this is defined then the \fInewmail\fR program automatically puts 
  702. Xitself into background as soon as it's invoked.  Otherwise, the
  703. Xuser needs to have a trailing ampersand (as in \fBnewmail &\fR) to
  704. Xget the same functionality.  (it seems reasonable to assume that
  705. Xno-one would ever run the utility as a \fIforeground\fR process!!!)
  706. X.LI DONT_ADD_FROM
  707. XSome mail systems (like my own) add From: lines that are
  708. Xactually different than the "default".  That is, the machine
  709. XI send mail from is "hpldat" so my From: line would normally
  710. Xbe "hpldat!taylor" but it should actually be "taylor@hplabs".
  711. XMy sendmail will add this correctly, so this allows \fBElm\fR
  712. Xto defer the addition until then.  This should only be used
  713. Xif your system is running sendmail in such a way that it will
  714. Xadd this header as needed ONLY!
  715. X.LI INTERNET_ADDRESS_FORMAT
  716. XFor systems that prefer the Internet addressing notation in the 
  717. XFrom: line, defining this will force that.  The default is
  718. Xto use Usenet notation (\fIhostname!username\fR) - this will change
  719. Xit to Internet notation (\fIusername@hostname\fR).
  720. X.LI PREFER_UUCP
  721. XOn some mail systems, the local host automatically appends their
  722. Xidentification \fIin Internet format\fR to the addresses you
  723. Xreceive (e.g. ``ihnp4!snsvax!joe@hplabs.HP.COM'' is an address
  724. Xform I see, being directly connection to HPLABS, all too often).
  725. XThis will simple ensure that when displaying the return address 
  726. Xof the message it will ignore the Internet part if there's also 
  727. Xa UUCP part.  (This is a kludge.  One should never have to 
  728. Xdeal with this in a mail system... *sigh*)
  729. X.LI BOGUS_INTERNET
  730. XAfter some serious thought, I came to the conclusion that the
  731. Xeasiest way to deal with the dumb configuration here is to 
  732. Xsimply strip off the local address part entirely whenever 
  733. Xpossible.  Hence, this field defines the local address that
  734. Xis added to the message addresses needlessly.  This is probably
  735. Xthe single worst solution imaginable, but it works...
  736. X.LI USE_DOMAIN
  737. XDefine if you want to have the \fIDOMAIN\fR field added to the
  738. X\fIhostname\fR in the From: field on outbound mail (note that this
  739. Xonly makes sense on Internet mail...)
  740. X.LI DOMAIN
  741. XIf you choose to have the USE_DOMAIN define set, you
  742. X\fIMUST DEFINE THIS ACCORDINGLY!!!\fR
  743. XA typical entry would be;
  744. X.DS
  745. X#define DOMAINS        ".HP.COM"
  746. X.DE
  747. X.LI SAVE_GROUP_MAILBOX_ID
  748. XIf you're running the mailer set group id (usually "setgid mail") then
  749. Xthis'll ensure that the users mailbox, when altered, will always retain
  750. Xits group id (obtained by the "getegid()" call, for those gurus out
  751. Xthere who care).  
  752. X.LI ENABLE_CALENDAR"
  753. XIf you want to have users able to scan their mail for calendar entries
  754. X(see the \fIElm Reference Guide\fR) then define this and the following
  755. Xtoo.  (There is no reason not to have this, but power corrupts, right?)
  756. X.LI "dflt_calendar_file"
  757. XThe name of the default "calendar" file if the user doesn't specify
  758. Xone in their \fI.elmrc\fR file.
  759. X.LI NOTES_HEADER
  760. XThis defines the first "word" of the line that a \fInotes\fR file entry
  761. Xwould contain.
  762. X.LI NOTES_FOOTER
  763. XThis defines the footer line (in it's entirety).
  764. X.LI system_hash_file
  765. XThis is the file that contains the hashed version of the system 
  766. Xaliases.  It is also used in the \fInewalias\fR command.  (note that
  767. Xit is defined differently if you're running on a Berkeley system)
  768. X.LI system_data_file
  769. XThis is the other file the \fInewalias\fR command installs in the system
  770. Xalias area.  (Note this is defined differently if you're runnnig
  771. Xa bsd system)
  772. X.LI pathfile
  773. XThis defines the location of the pathalias datafile.  This file is in
  774. Xthe format that \fIpathalias\fR generates, that is;
  775. X.nf
  776. X   
  777. X    machine <tab> address
  778. X
  779. X.fi
  780. XFor further information, please see the \fIElm Alias System\fR documentation.
  781. X.LI domains
  782. XThis defines the location of the the domains database file.  The format
  783. Xfor this file and so on are fully discussed in the \fIElm Alias System\fR
  784. Xdocument.
  785. X.LI Lsys
  786. XThis defines where the system \fIL.sys\fR file is kept.  This is used for the
  787. Xmailer to quickly know what machines the current machine can talk to
  788. Xdirectly (to avoid trying to search the pathalias database to route mail
  789. Xto these machines).  
  790. X.LI DEBUG
  791. XThe name of the file to put in the users home directory if they choose to
  792. Xuse the `-d' debug option. 
  793. X.LI temp_file
  794. XTemporary file for sending outbound messages.
  795. X.LI temp_mbox
  796. XPlace to keep copy of incoming mailbox to avoid collisions with newer
  797. Xmail.
  798. X.LI temp_print 
  799. XFile to use when creating a printout of a message.
  800. X.LI mailtime_file
  801. XFile to compare date to to determine if a given message is New
  802. Xsince the last time the mail was read or not.
  803. X.LI readmsg_file
  804. XFile to use when communicating with the \fIreadmsg\fR program (see
  805. Xthat program for more information)
  806. X.LI signature_file
  807. XThe name of the file to search for in the users home directory
  808. Xif they have \fIsignature\fR enabled in their \fI.elmrc\fR file.
  809. X.LI default_editor
  810. XIf no editor is specified in the users .elmrc file, this is which
  811. Xeditor to use.  \s12 Ensure it is a valid editor on this machine!!\s10
  812. X(Note that the default home for \fIvi\fR is different on BSD machines)
  813. X.LI mailhome
  814. XWhere all the incoming mailboxes are, and also where the 'lock'
  815. Xfiles have to be put for the mailer to know not to add new
  816. Xmail while we're reading/writing the mailfile.
  817. X(note that mail is kept in a different directory on Berkeley 
  818. Xsystems)
  819. X.LI default_pager
  820. XThis is the standard pager to use for reading messages.
  821. X.LI sendmail
  822. XDefines where \fIsendmail\fR is (if you have it on your system).
  823. X.LI smflags 
  824. XDefines the flags to hand to \fIsendmail\fR if and when the program
  825. Xchooses to use it.
  826. X.LI mailer
  827. XIf you don't have \fIsendmail\fR, this is the mailer that'll be used.
  828. X.LI mailx
  829. XIf all else fails, this mailer can be used in a rather dumb way.
  830. X.LI helphome
  831. XWhere the help file is kept (soon to be help files!)
  832. X.LI helpfile
  833. XThe name of the main helpfile (kept in \fIhelphome\fR).
  834. X.LI elmrcfile
  835. XThe name of the automatic control file (currently \fI.elmrc\fR)
  836. X.LI mailheaders 
  837. XThe name of the optional file that users may have that will be
  838. Xincluded in the headers of each outbound message.
  839. X.LI unedited_mail
  840. XIn the strange case when the mailer suddenly finds all the directories
  841. Xit uses shut off (like \fI/usr/mail\fR and \fI/tmp\fR) 
  842. Xthen it'll put the current
  843. Xmailbox into this file in the users home directory.
  844. X.LI newalias
  845. XHow to install new aliases..(note: you MUST have the '-q' flag!)
  846. X.LI remove
  847. XHow to remove a file.
  848. X.LI cat
  849. XHow to display a file to stdout.
  850. X.LI uuname
  851. XHow to get a \fIuuname\fR listing (ie a listing of the machines that this
  852. Xmachine connects to)
  853. X.LE
  854. END-OF-FILE
  855.  
  856. if [ "$filename" != "/dev/null" ]
  857. then
  858.   size=`wc -c < $filename`
  859.  
  860.   if [ $size != 20499 ]
  861.   then
  862.     echo $filename changed - should be 20499 bytes, not $size bytes
  863.   fi
  864.  
  865.   chmod 644 $filename
  866. fi
  867.  
  868. # ---------- file doc/helpfile ----------
  869.  
  870. filename="doc/helpfile"
  871.  
  872. if [ -f $filename ]
  873. then
  874.   echo File \"$filename\" already exists\!  Skipping...
  875.   filename=/dev/null        # throw it away
  876. else
  877.   echo extracting file doc/helpfile...
  878. fi
  879.  
  880. cat << 'END-OF-FILE' > $filename
  881.  
  882.         Command                     Action
  883.  
  884.        |         Pipe current message to ...
  885.        !        Shell escape
  886.            ?            This screen of information
  887.            +, <SPACE>   Next page of headers
  888.            -            Previous page of headers
  889.            =            Set current message to 1
  890.        *        Set current message to last message
  891.            <n>          Set current message to n
  892.        /        Search from/subjects for pattern
  893.        //        Search entire message bodies for pattern
  894.        >        Save current message or tagged to file
  895.        <        Scan current message for calendar entries
  896.  
  897.            a            Alias, change to 'alias' mode 
  898.        b        Bounce (remail) current message
  899.            c            Change current mail file
  900.            d            Delete current message
  901.        e        Edit the current mailbox
  902.            f            Forward message to specified user
  903.        g            Group (all recipients) reply to message
  904.        h        Headers displayed with message
  905.            j        Increment current message by one
  906.        k        Decrement current message by one
  907.            m            Mail to arbitrary user(s)
  908.            n            Next message (Read current, then increment)
  909.        o        Change Elm options
  910.        p            print current message
  911.            q            Quit - mail deleted, saved in mbox or left.
  912.            r            Reply to current message
  913.            s            Save message to specified file
  914.        t        Tag a message for further operations
  915.            u            Undelete current message
  916.            x            Exit - don't record as read, don't save...
  917.  
  918.           ^L            Rewrite screen.
  919.       <RETURN>    Read current message
  920.       ^Q, DEL    Exit - don't record as read, don't save...
  921. END-OF-FILE
  922.  
  923. if [ "$filename" != "/dev/null" ]
  924. then
  925.   size=`wc -c < $filename`
  926.  
  927.   if [ $size != 1674 ]
  928.   then
  929.     echo $filename changed - should be 1674 bytes, not $size bytes
  930.   fi
  931.  
  932.   chmod 644 $filename
  933. fi
  934.  
  935. # ---------- file doc/Alias.guide ----------
  936.  
  937. filename="doc/Alias.guide"
  938.  
  939. if [ -f $filename ]
  940. then
  941.   echo File \"$filename\" already exists\!  Skipping...
  942.   filename=/dev/null        # throw it away
  943. else
  944.   echo extracting file doc/Alias.guide...
  945. fi
  946.  
  947. cat << 'END-OF-FILE' > $filename
  948. .PH ""
  949. \"
  950. \"  A guide to the ELM alias system and so on.
  951. \"  format with 'nroff -mm Config.guide > Config.format'
  952. \"  or something similar.
  953. \"  (C) Copyright 1986 Dave Taylor
  954. \"
  955. \"  Last modification: March 13th, 1986
  956. \"
  957. .SA 1
  958. .nr Hy 1
  959. .nr Pt 1
  960. .nr Pi 8
  961. .lg
  962. .HM 1 1
  963. .rs
  964. .ds HF 3  3  
  965. .ds HP 12 12 10 10 10
  966. .PF ""
  967. .ce 99
  968. .sp 5
  969. .ps 20
  970. \fBELM Alias Users Guide\fR
  971. .sp 4
  972. .ps 12
  973. \fIWhat aliases are and how to use them
  974. in the \fBElm\fP mail system\fR
  975. .sp 2
  976. Dave Taylor
  977. .sp
  978. Hewlett-Packard Laboratories
  979. 1501 Page Mill Road
  980. Palo Alto CA
  981. 94304
  982. .sp 
  983. email: taylor@hplabs or hplabs!taylor
  984. .sp 7
  985. .ps 18
  986. \fB\(co\fR\s12 Copyright 1986 by Dave Taylor
  987. .ps 10
  988. .SK
  989. .sp 5
  990. .ps 14
  991. \fBElm Alias Users Guide\fR
  992. .PH "'Alias Users Guide''version 1.1'
  993. .PF "''Page \\\\nP''"
  994. .nr P 1
  995. .sp
  996. .ps 10
  997. (version 1.1)
  998. .sp 2
  999. Dave Taylor
  1000. .sp
  1001. Hewlett-Packard Laboratories
  1002. 1501 Page Mill Road
  1003. Palo Alto CA
  1004. 94304
  1005. .sp 
  1006. email: taylor@hplabs or hplabs!taylor
  1007. .sp 2
  1008. \*(DT
  1009. .ce 0
  1010. .sp 3
  1011. .P
  1012. This document is intended as a supplement to the \fIElm Users Guide\fR
  1013. and is only of interest to those users desiring more knowledge
  1014. about how aliases work and how to create strange and exciting
  1015. aliases for their systems (alright, so it's not \fIthat\fR exciting!)
  1016. .sp
  1017. .P
  1018. This document is broken up into the following sections;
  1019. user aliases,
  1020. group aliases,
  1021. system aliases,
  1022. editing and installing new aliases,
  1023. the machine routing database,
  1024. the domain routing database,
  1025. and general warnings and other chitchat.
  1026. .sp
  1027. .H 1 "User Aliases"
  1028. The most simple sort of aliases in the \fBElm\fR system are individual
  1029. user aliases.  These are made up of three parts;
  1030. .nf
  1031.  
  1032.     \fIaliasname list\fR : \fIusername\fR : \fIaddress\fR
  1033.  
  1034. .fi
  1035. Where the \fIaliasname list\fR is either a single aliasname*
  1036. .FS *
  1037. Please see the appendix for a full definition of what exactly an
  1038. aliasname consists of.
  1039. .FE
  1040. or a list of aliasnames separated by commas.
  1041. .P
  1042. \fIUsername\fR is currently a comment field, and is used to indicate
  1043. the full "real name" that the alias is for.  For example, if you had
  1044. an alias for "dat" to get to me, the \fIusername\fR field would
  1045. contain "Dave Taylor" or perhaps "Dave Taylor, HP" or some other
  1046. permutation of that.  In a future release of the mailer, the alias
  1047. system will know about this field and include it in outgoing messages
  1048. AND as a supplement to the usual list of aliasnames. 
  1049. .P
  1050. \fIAddress\fR is either the users full electronic mail address or, if
  1051. the machine routing database is installed, the minimum address needed
  1052. to specify the destination.  For example, say our routing database
  1053. contained information on how to get to machine "hp-sdd" and I wanted
  1054. to have an address for my friend Ken there - I could have his address
  1055. specified as simply "ken@hp-sdd" (or alternatively "hp-sdd!ken" since
  1056. the two are functionally equivalent).
  1057. .sp
  1058. .P 0
  1059. Let's get on to some examples, shall we?
  1060. .sp
  1061. Consider this excerpt from my own \fI.alias_text\fR file;
  1062. .nf
  1063.  
  1064. wunder,walt   : Walt Underwood  : wunder@hpcea
  1065. laubach       : Mark Laubach    : laubach@hpcea
  1066. mary          : Mary Hsia-Coron : hsia@hpindla
  1067. decot         : Dave Decot      : decot@hpda
  1068.      
  1069. jeff          : Jeff Wu         : hpcnoe!j_wu
  1070. dave          : Dave Barrett    : hpcnof!d_barrett
  1071.  
  1072. .fi
  1073. Note that the alias for Walt Underwood has two \fIaliasnames\fR associated
  1074. with it, \fIwunder\fR and \fIwaltf\R.  Also notice that the first four aliases
  1075. use the Internet style naming convention (\fIuser@machine\fR) but the last two
  1076. use the UUCP style convention (\fImachine!user\fR).  In this context it is
  1077. independent.
  1078. .P
  1079. The only time when it \fIdoes\fR make a difference which notation you
  1080. use is if you have to specify more than the machine that the user is
  1081. receiving mail on.  That is, say we have a friend who receives mail at
  1082. a machine called \fBtwinkie\fR and our best connection is through Georgia
  1083. Tech...Then our alias for them could be;
  1084. .nf
  1085.  
  1086.   buddy         : Our friend      : gatech!twinkie!buddy
  1087.  
  1088. or
  1089.  
  1090.   buddy2        : Our friend      : gatech!buddy@twinkie
  1091.  
  1092. .fi
  1093. but not;
  1094. .nf
  1095.  
  1096.   buddy         : Our friend      : buddy@twinkie@gatech
  1097.  
  1098. .fi
  1099. (however, buddy%twinkie@gatech \fIwill\fR also work, but that's far
  1100. too bizarre a notation to be recommended!!) (besides there's no
  1101. guarantee that "gatech" will like it, nor the "buddy2" alias above!)
  1102. .P
  1103. Anyway, suffice to say that if you must specify any sort of route
  1104. that you should use the uucp notation as much as possible to ensure
  1105. that the \fBElm\fR system expands the correct machine name.
  1106. .sp
  1107. .H 1 "Group Aliases"
  1108. After the confusion of user aliases, group aliases are even more 
  1109. fun!  For the most part the notation is very similar;
  1110. .nf
  1111.  
  1112.     \fIaliasname list\fR : \fIgroupname\fR : \fIlist of people\fR
  1113.  
  1114. .fi
  1115. Where \fIaliasname list\fR and \fIgroupname\fR are exactly equivalent
  1116. to the corresponding fields in user aliases.
  1117. .P
  1118. The interesting part is the \fIlist of people\fR field!  This
  1119. field is actually in the same notation as the aliasname list,
  1120. so it's not quite as strange as I've lead you to believe.
  1121. It's best to illustrate by example;
  1122. .nf
  1123.  
  1124. friends, mypals, gang : The Gang of Six : joe, larry, mary, joanna,
  1125.                       nancy, michael
  1126.  
  1127. .fi
  1128. (Notice that you can continue onto as many lines as you'd like so
  1129. long as each additional line start with either a \s8SPACE\s10 or a \s8TAB\s10
  1130. character)
  1131. .P
  1132. The significant limitation with group aliases is that each of the
  1133. people in the list must be a \fIpreviously defined aliasname in either the
  1134. existing alias file or the system alias file\fR or a valid destination
  1135. on the current machine.
  1136. .P
  1137. What does this mean?  This means that the following excerpt from an
  1138. alias file;
  1139. .nf
  1140.  
  1141. hawaii : The Hawaiian Twins : joe@\s8RIT-CS.ARPA\s10, maoa
  1142. maoa   : Maoa Lichtenski Jr : maoa@Hawaii.cs.uh.\s8ARPA\s10
  1143.  
  1144. .fi
  1145. will fail for two reasons - not only does the group \fIlist of people\fR
  1146. contain a complex address, but it also contains an aliasname that is 
  1147. defined \fIlater\fR in the \fI.alias_text\fR file!  \fB** \s8BEWARE\s10!!! **\fR
  1148. .P
  1149. The correct way to have the previous alias in the file is to have it like;  
  1150. .nf
  1151.  
  1152. joe    : Joe Lichtenski     : joe@\s8RIT-CS\s10
  1153. maoa   : Maoa Lichtenski Jr : maoa@Hawaii
  1154. hawaii : The Hawaiian Twins : joe, maoa
  1155.  
  1156. .fi
  1157. which will then work correctly.
  1158. .P 0
  1159. This isn't too hard now, is it?
  1160. .sp
  1161. Fortunately, while this seems pretty tough, if you run the \fInewalias\fR
  1162. command to install your new aliases, it will give you nice meaningful
  1163. error messages that will help you fix the list up correctly!
  1164. .sp
  1165. .H 1 "System Aliases"
  1166. System aliases are functionally equivalent to the individual \fBElm\fR 
  1167. alias lists each \fBElm\fR user has (both user aliases and group aliases) 
  1168. but are "read only" for everyone but the \fBElm\fR administrator.  The 
  1169. format of the file is identical to the users file, and the only difference is
  1170. that this file is expected to be located in the directory that contains
  1171. the \fIsystem_hash_file\fR and \fIsystem_data_file\fR files (see the
  1172. \fIElm Configuration Guide\fR for more details on these variables).
  1173. .P
  1174. Simply create a \fI.alias_text\fR file in the specific directory
  1175. as you would a normal file, and install it the same way (see the
  1176. following section for more details on that).  
  1177. .P
  1178. Voila!!
  1179. .sp
  1180. .H 1 "Editing and Installing New Aliases"
  1181. To install new aliases, you need merely to create, or modify,
  1182. your \fI.alias_text\fR file in your home directory until you're
  1183. satisfied with it and it meets the requirements stated above.
  1184. You can then try to install it with the command;
  1185. .nf
  1186.  
  1187.     $ \fBnewalias\fR
  1188.  
  1189. .fi
  1190. which will either report back the number of aliases installed into 
  1191. the system or will report errors indicative of the changes that
  1192. the program expects before it can accept the alias list.
  1193. .P
  1194. Note that blank lines are no problem and that comments are not only
  1195. allowed but actually encouraged, and must have `\fB#\fR' as the first
  1196. character of each comment line.
  1197. .sp
  1198. Finally, if you find that you're hitting the ``Too many aliases'' error, 
  1199. then you'll need to reconfigure the entire \fBElm\fR system (again,
  1200. see the \fIElm Configuration Guide\fR especially the discussion on
  1201. \fIMAX_UALIASES\fR and \fIMAX_SALIASES\fR therein).
  1202. .sp
  1203. .H 1 "The Hostname Routing Database"
  1204. Floating about on the various networks is a rather nifty program by
  1205. a number of people, including Peter Honeyman and Steve Bellovin, 
  1206. called \fIpathalias\fR.  What this incredibly handy program does is 
  1207. take the strange postings in netnews groups like "mod.map" and massage
  1208. them into a file of the form;
  1209. .nf
  1210.  
  1211.   \fIhostname\fR    \fIaddress\fR
  1212.  
  1213. .fi
  1214. which is then sorted alphabetically and stored in the file
  1215. pointed to by \fIpathfile\fR (guess where to look for more information!)
  1216. for \fBElm\fR to use.
  1217. .P
  1218. If you don't have the program, or don't want to use it, you can 
  1219. simulate this file by listing machines in the same format.  The
  1220. exact format expected is;
  1221. .nf
  1222.  
  1223.   \fIhostname\fR<tab>\fImachine-address\fR
  1224.  
  1225. .fi
  1226. where \fIhostname\fR is a limited identifier (no special characters) and
  1227. machine-address MUST contain the sequence `%s' (and consequently
  1228. any other percent signs that appear in the address must be paired)
  1229. so that the call in the program ``sprintf(buffer, machine-address, username)''
  1230. will generate a valid return address.
  1231. .P 0
  1232. By way of example, here are a few entries from my own file;
  1233. .nf
  1234.  
  1235.  \s8HPL\s10    hplabs!%s
  1236.  \s8PARC\s10   hplabs!%s@Xerox.\s8PA.COM\s10
  1237.  amc-hq     hplabs!%s@\s8AMC-HQ.ARPA\s10
  1238.  imsss        hplabs!%s%%\s8IMSSS@SU-AI.ARPA\s10
  1239.  infopro    hpfcla!ihnp4!astrovax!infopro!%s
  1240.  interleaf  hpfcdc!hpda!sun!interleaf!%s
  1241.  jpl-vax    hplabs!%s@jpl-vax
  1242.  
  1243. .fi
  1244. As you can see, the addresses can get pretty complicated!!  In fact
  1245. it's due purely to the complication that a database file of this
  1246. sort can be so wonderful!!
  1247. .sp
  1248. If you'd like further information on the pathalias program, try
  1249. keeping track of the entries in the netnews group \fImod.sources\fR - 
  1250. it's posted about once a year or so...
  1251. .sp
  1252. .H 1 "The Domain Routing Database"
  1253. One of the more interesting features of the 3.2 and above
  1254. \fBElm\fR mailer is the domain routing database.  This is
  1255. the same database (in the same strange format) as used by
  1256. the most recent version of the \fIuumail\fR program.
  1257. .P
  1258. In a nutshell, the file contains information of the form;
  1259. .nf
  1260.  
  1261.    \fIdomain\fR   \fIpathtogateway\fR  \fIrewrite-template\fR
  1262.  
  1263. .fi
  1264. The \fIdomain\fR field must begin with a leading `.' and
  1265. should be ordered in the same notation as the standard
  1266. domain information (that is, "\s8.HP.COM\s10" not "\s8.COM.HP\s10").
  1267. .P
  1268. \fIPathtogateway\fR is routing information on how to get
  1269. to the particular gateway that this domain expects, and
  1270. always is a machine/host name (to be found in the pathalias
  1271. database, see the previous section) preceeded by a `>' 
  1272. character.
  1273. .P
  1274. \fIRewrite-template\fR is the most interesting of the
  1275. three, and is akin to a printf string for C.  The 
  1276. changes are that instead of `%s' `%d' and so on, the
  1277. actual "percent" values represent various parts of 
  1278. the address, namely;
  1279. .nf
  1280.  
  1281.     Symbol        Represents
  1282.     ------          ----------
  1283.       %U        The username in the To: address
  1284.       %N        The remote machine name
  1285.       %D        %N + domain information 
  1286.       %R        path to %N from pathalias
  1287.       %P        \fIpathtogateway\fR entry
  1288.       %S        Obsolete!
  1289.       %%        The `%' character
  1290.  
  1291. .fi
  1292. with this very intuitive setup, let's look at a few entries 
  1293. from the domains database and see how they work;
  1294. .nf
  1295.  
  1296. .ps 8
  1297.   .EUR.UUCP,,,%R!%U
  1298.   .ATT.UUCP,>\s10ihnp4\s8,,%P!%D!%U
  1299.   .HP.COM,,,%R!%U
  1300.   .UUCP,,,%R!%U
  1301.   .COM,>\s10hplabs\s8,,%P!%U@%D
  1302.   .CSNET,>\s10hplabs\s8,,%P!%U%%%D@CSNET-RELAY.ARPA
  1303.   .ARPA,>\s10hplabs\s8,,%P!%U@%D
  1304. .ps 10
  1305.  
  1306. .fi
  1307. (Note the presence of a third field that is always null.  This is
  1308. for compatability with the "uumail" program, but this field is
  1309. now always \fI\s8NULL\s10\fR)
  1310. .P
  1311. To see how it all works, let's suppose that we want to send a message
  1312. to "jad@Purdue.\s8ARPA\s10".  This would break down into the following fields:
  1313. .nf
  1314.  
  1315.     %U = jad
  1316.     %N = Purdue
  1317.     %D = Purdue.\s8ARPA\s10
  1318.       
  1319. .fi
  1320. When the \fBelm\fR program matches the ".\s8ARPA\s10" entry
  1321. .nf
  1322.  
  1323.   .\s8ARPA\s10,>hplabs,,%P!%U@%D
  1324.  
  1325. .fi
  1326. the other fields instantiated would be:
  1327. .nf
  1328.  
  1329.     %P = <path to hplabs>
  1330.   template = %P!%U@%D
  1331.  
  1332. .fi
  1333. As is hopefully obvious, if our path to hplabs was "hpcnoe!hplabs" then
  1334. the fully expanded address would be;
  1335. .nf
  1336.  
  1337.     hpcnoe!hplabs!jad@Purdue.\s8ARPA\s10
  1338.  
  1339. .fi
  1340. And so on.  
  1341. .sp
  1342. .P
  1343. What does this mean to the average user?  It means that you can
  1344. for the most part send mail to people on different gateways by
  1345. simply usnig their full domain information, so that mail to 
  1346. addresses like "Jack@\s8MIT.MIT.EDU\s10" will work, and mail 
  1347. to "SueAnn@\s8BBN.MAILNET\s10"
  1348. will work and so on!!
  1349. .sp
  1350. .H 1 "Other Stuff not Covered Yet"
  1351. Probably the biggest question you have in your mind right now is
  1352. "But how the heck does this relate to the 'ole \fImailx\fR
  1353. aliases and the snazzo \fIsendmail\fR alias system??"  Well,
  1354. rest assured, \fIsendmail\fR fans, that if you \fIreally\fR want to have
  1355. your aliases down in the transport you can.  No problem.  All you'll
  1356. need to do is to turn off the address validation routine in \fBElm\fR
  1357. by defining the \fINOCHECK_VALIDNAME\fR definition (I'm not even going to 
  1358. bother to tell you where to look for this one!!).
  1359. .P
  1360. For those \fImailx\fR fanatics out there, you can translate your 
  1361. aliases into the format that \fBElm\fR wants by running them
  1362. through the \fIawk\fR script listed in Appendix Two.
  1363. .sp
  1364. .P
  1365. Finally, if you have any problems or questions, try looking in 
  1366. the \fInewalias\fR manual entry, or dropping me a line at the
  1367. "usual" email address (ask your administrator!).
  1368. .SK
  1369. .ce 99
  1370. Appendix One
  1371.  
  1372. A BNF of the Alias File Grammar
  1373. .ce 0
  1374. .sp 2
  1375. In this listing, items in <> brackets are non-terminals, items in {}
  1376. are optional, and items in \fBbold face\fR are terminals.
  1377. .sp 2
  1378. .nf
  1379.  
  1380. <alias_file>  ::=  <line> { <alias_file> }
  1381.  
  1382. <line>          ::=  <comment> | <empty> | <alias>
  1383.  
  1384. <comment>     ::=  .. any sequence of characters starting with '#' ..
  1385.  
  1386. <empty>          ::=  .. an empty line ..
  1387.  
  1388. <alias>          ::=  <user alias> | <group alias>
  1389.  
  1390. <user alias>  ::=  <aliaslist> \fB:\fR { <comment> \fB:\fR } 
  1391.            {<whitespace>} <address>
  1392.  
  1393. <group alias> ::=  <aliaslist> \fB:\fR { <comment> \fB:\fR } 
  1394.            {<whitespace>} <list of addresses>
  1395.  
  1396. <aliaslist>   ::=  <aliasname> { \fB,\fR <aliaslist> }
  1397.  
  1398. <aliasname>   ::=  <alpha-char> { <sequence-of-chars> }
  1399.  
  1400. <comment>     ::=  .. anything other than ":" ..
  1401.  
  1402. <address>     ::=  <username> | <arpa-address> | <uucp-address> | 
  1403.            <complex-address>
  1404.  
  1405. <list-of-addresses> ::= <aliasname> { \fB,\fR <whitespace> } 
  1406.             { <list-of-addresses> }
  1407.  
  1408. <username>    ::=  .. any valid mailbox name on the system ..
  1409.  
  1410. <arpa-address> ::= <username> ( \fB@\fR <hostname> | <postfix> )
  1411.  
  1412. <hostname>    ::=  .. any legal host machine name ..
  1413.  
  1414. <uucp-address> ::= <hostname> \fB!\fR <username>
  1415.  
  1416. <complex-address> ::= <prefix> ( <uucp-address> | <arpa-address> )
  1417.  
  1418. <prefix>      ::= <hostname> \fB!\fR { <prefix> }
  1419.  
  1420. <postfix>     ::= \fB%\fR <hostname> { <postfix> } \fB@\fR 
  1421.           <hostname>
  1422.  
  1423. <sequence-of-chars> ::= .. any characters other than space, tab, 
  1424.                    return, or colon ..
  1425.  
  1426. <whitespace> ::= .. space, tab or newline followed by space or tab ..
  1427.  
  1428. .fi
  1429. .SK
  1430. .ce 99
  1431. Appendix Two
  1432.  
  1433. An AWK Script for 
  1434. Translating Aliases from a
  1435. ".mailrc" Format to a
  1436. Elm Format
  1437. .ce 0
  1438. .sp 2
  1439. .nf
  1440. .ce
  1441. -------------------------------------------------------------------
  1442.  
  1443. BEGIN { 
  1444.     print "# ELM alias_text file, from a .mailrc file..." 
  1445.     print ""
  1446.       }
  1447.  
  1448. next_line == 1 { 
  1449.  
  1450.     next_line = 0;
  1451.         group = ""
  1452.     for (i = 1; i <= NF; i++) {
  1453.       if (i == NF && $i == "\\\\") sep = ""
  1454.       else                       sep = ", "
  1455.     
  1456.       if ($i == "\\\\") {
  1457.         group = sprintf("%s,", group)
  1458.         next_line = 1;
  1459.       }
  1460.       else if (length(group) > 0)
  1461.         group = sprintf("%s%s%s", group, sep, $i);
  1462.       else
  1463.         group = $i;
  1464.       }
  1465.       print "\\t" group
  1466.  
  1467.     }
  1468.  
  1469. $1 ~ /[Aa]lias|[Gg]roup/ { 
  1470.  
  1471.     if ( NF == 3)
  1472.       print $2 " : user alias : " $3;
  1473.     else {
  1474.       group = ""
  1475.       for (i = 3; i <= NF; i++) {
  1476.         if (i == NF && $i == "\\\\") sep = ""
  1477.         else        sep = ", "
  1478.     
  1479.         if ($i == "\\\\") {
  1480.            group = sprintf("%s,", group)
  1481.            next_line = 1;
  1482.         }
  1483.         else if (length(group) > 0) 
  1484.            group = sprintf("%s%s%s", group, sep, $i);
  1485.         else
  1486.            group = $i;
  1487.         }
  1488.         print $2 " : group alias : " group;
  1489.       }
  1490.      }
  1491.  
  1492. .ce
  1493. -------------------------------------------------------------------
  1494. .fi
  1495. .P
  1496. Note: this script is contained in the release under the name 
  1497. "mailrc.awk" in the utilities directory "utils".
  1498. END-OF-FILE
  1499.  
  1500. if [ "$filename" != "/dev/null" ]
  1501. then
  1502.   size=`wc -c < $filename`
  1503.  
  1504.   if [ $size != 16407 ]
  1505.   then
  1506.     echo $filename changed - should be 16407 bytes, not $size bytes
  1507.   fi
  1508.  
  1509.   chmod 644 $filename
  1510. fi
  1511.  
  1512. # ---------- file doc/wnewmail.1 ----------
  1513.  
  1514. filename="doc/wnewmail.1"
  1515.  
  1516. if [ -f $filename ]
  1517. then
  1518.   echo File \"$filename\" already exists\!  Skipping...
  1519.   filename=/dev/null        # throw it away
  1520. else
  1521.   echo extracting file doc/wnewmail.1...
  1522. fi
  1523.  
  1524. cat << 'END-OF-FILE' > $filename
  1525. .TH WNEWMAIL 1L 
  1526. .ad b
  1527. .SH NAME
  1528. wnewmail - daemon to asynchronously notify of new mail
  1529. .SH SYNOPSIS
  1530. .B wnewmail
  1531. .br
  1532. .B wnewmail
  1533. filename
  1534. .PP
  1535. .SH HP-UX COMPATIBILITY
  1536. .TP 10
  1537. Level:
  1538. HP-UX/STANDARD
  1539. .TP
  1540. Origin:
  1541. Hewlett-Packard
  1542. .SH DESCRIPTION
  1543. .I Wnewmail\^
  1544. is a daemon designed to run in \fBa window\fR on a windowing
  1545. system (such as an HP or Sun system) and check every 10 seconds
  1546. to see if there is any new mail for the user that
  1547. started it up.
  1548. .P
  1549. If there is new mail, the program will "beep", and write to
  1550. the window for each of the new messages;
  1551. .nf
  1552.  
  1553.    Mail from <name> -- <subject>
  1554.  
  1555. .fi
  1556. where <name> is either the name of the person sending it,
  1557. if available (the ARPA 'From:' line) or machine!login where
  1558. machine is the machine the mail was sent from.  If there
  1559. is no subject, the message "<no subject>" will appear on
  1560. the screen.
  1561. .P
  1562. This program will run forever, and can internally reset 
  1563. itself if mail is deleted from the incoming mailbox while
  1564. trying to monitor it.
  1565. .P
  1566. If \fBwnewmail\fR is started up with a filename, it will
  1567. perform exactly the same, but with the specified file as
  1568. the one to check rather than the default users mailbox.
  1569. .SH AUTHOR
  1570. Dave Taylor, Hewlett-Packard Laboratories.
  1571. .SH SEE ALSO
  1572. notify in sh(1) or csh(1), newmail(1L)
  1573. .SH NOTE
  1574. This is almost identical to the program \fBnewmail\fR...
  1575. END-OF-FILE
  1576.  
  1577. if [ "$filename" != "/dev/null" ]
  1578. then
  1579.   size=`wc -c < $filename`
  1580.  
  1581.   if [ $size != 1318 ]
  1582.   then
  1583.     echo $filename changed - should be 1318 bytes, not $size bytes
  1584.   fi
  1585.  
  1586.   chmod 644 $filename
  1587. fi
  1588.  
  1589. echo end of this archive file....
  1590. exit 0
  1591.  
  1592.