home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume22 / elm2.3 / part04 < prev    next >
Text File  |  1990-06-07  |  50KB  |  1,674 lines

  1. Subject:  v22i063:  ELM mail syste, release 2.3, Part04/26
  2. Newsgroups: comp.sources.unix
  3. Approved: rsalz@uunet.UU.NET
  4. X-Checksum-Snefru: d6cbfae8 e6d661e1 0483ed69 01e32cf2
  5.  
  6. Submitted-by: Syd Weinstein <syd@dsinc.dsi.com>
  7. Posting-number: Volume 22, Issue 63
  8. Archive-name: elm2.3/part04
  9.  
  10. ---- Cut Here and unpack ----
  11. #!/bin/sh
  12. # this is part 4 of a multipart archive
  13. # do not concatenate these parts, unpack them in order with /bin/sh
  14. # file doc/Alias.guide continued
  15. #
  16. CurArch=4
  17. if test ! -r s2_seq_.tmp
  18. then echo "Please unpack part 1 first!"
  19.      exit 1; fi
  20. ( read Scheck
  21.   if test "$Scheck" != $CurArch
  22.   then echo "Please unpack part $Scheck next!"
  23.        exit 1;
  24.   else exit 0; fi
  25. ) < s2_seq_.tmp || exit 1
  26. echo "x - Continuing file doc/Alias.guide"
  27. sed 's/^X//' << 'SHAR_EOF' >> doc/Alias.guide
  28. Xtake the Usenet articles in the group ``comp.mail.maps'' and change
  29. Xthem into a file of the form;
  30. X
  31. X    \f2hostname\f1    <tab>    \f2address\f1
  32. X
  33. Xwhich then must be sorted alphabetically and stored in the file
  34. Xpointed to by \f2pathfile\f1 for \f3Elm\f1 (and other 
  35. Xprograms) to use.
  36. X.pg
  37. XIf you don't have the program, or don't want to use it, you can 
  38. Xsimulate this file by listing machines in the same format.  The
  39. Xexact format expected is;
  40. X
  41. X    \f2hostname\f1<tab>\f2machine-address\f1
  42. X
  43. Xwhere \f2hostname\f1 is a limited identifier (no special characters) and
  44. Xmachine-address MUST contain the sequence `%s' (and consequently
  45. Xany other percent signs that appear in the address must be paired)
  46. Xso that the call in the program ``sprintf(buffer, machine-address, username)''
  47. Xwill generate a valid return address.  This file must be sorted alphabetically
  48. Xfor Elm to use it properly.
  49. X.pg
  50. XBy way of example, here are a few entries from my own file;
  51. X
  52. X.ft CW
  53. X.zf
  54. X.in .5i
  55. X.TS
  56. Xl l.
  57. XHPL    %s@hplabs
  58. XPARC    %s%%Xerox.PA.COM@hplabs
  59. Xamc-hq    %s%%AMC-HQ.ARPA@hplabs
  60. Ximsss    %s%%IMSSS%%AI.STANFORD.EDU@hplabs
  61. Xinfopro    hplabs!infopro!%s
  62. Xinterleaf    sun!interleaf!%s
  63. X.TE
  64. X.ft 1
  65. X
  66. X.in 0
  67. XAs you can see, the addresses can get pretty complicated.  In fact
  68. Xit's due purely to the complexity of addresses that this file 
  69. Xis so useful.
  70. X.sp
  71. X.ne 5
  72. XSome brief examples:
  73. X
  74. X.in .5i
  75. X.ft CW
  76. X.zf
  77. X.nf
  78. X$ \f3elm joe@HPL\f1
  79. X.ft CW
  80. X.zf
  81. XTo: joe@hplabs
  82. X$ \f3elm michelle@imsss\f1
  83. X.ft CW
  84. X.zf
  85. XTo: michelle%IMSSS%AI.STANFORD.EDU@hplabs
  86. X$ \f3elm fiedler@infopro\f1
  87. X.ft CW
  88. X.zf
  89. XTo: hplabs!infopro!fiedler
  90. X.ft 1
  91. X.fi
  92. X
  93. X.in 0
  94. XIf you'd like further information on the \f2pathalias\f1 program, try
  95. Xkeeping track of the entries in the netnews group \f2comp.sources.unix\f1 \(em
  96. Xit's posted about once a year or so...
  97. X.sp
  98. X.hn 1 The Domain Routing Database
  99. X
  100. XAnother interesting feature of the 
  101. X\f3Elm\f1 system is the shorthand domain routing database.  
  102. XThis is the same database (in the same strange format) as used by
  103. Xthe publically available \f2uumail\f1 program.
  104. X.pg
  105. XIn a nutshell, the file contains information of the form;
  106. X
  107. X.in .5i
  108. X\f2domain,   path-to-gateway,  rewrite-template\f1
  109. X.in 0
  110. X
  111. XThe \f2domain\f1 field must begin with a leading `.' and
  112. Xis usually ordered in the same way as the standard
  113. Xdomain entries (that is, ``\s8.HP.COM\s10'' not ``\s8.COM.HP\s10'').
  114. X.pg
  115. X\f2Path-to-gateway\f1 is routing information on how to get
  116. Xto the particular gateway that this domain expects, and
  117. Xalways is a machine/host name (to be found in the pathalias
  118. Xdatabase, see the previous section) preceded by a `>' 
  119. Xcharacter.
  120. X.pg
  121. X\f2Rewrite-template\f1 is the most interesting of the
  122. Xthree, and is akin to a printf string for C.  The 
  123. Xchanges are that instead of `%s' `%d' and so on, the
  124. Xactual ``percent'' values represent various parts of 
  125. Xthe address, namely;
  126. X
  127. X.in .5i
  128. X.TS
  129. Xc l.
  130. X\f3Symbol    Represents\f1
  131. X%U    The username in the To: address
  132. X%N    The remote machine name
  133. X%D    %N + domain information 
  134. X%R    path to %N from pathalias
  135. X%P    \f2path-to-gateway\f1 entry
  136. X%%    The `%' character
  137. X.TE
  138. X.in 0
  139. X
  140. Xwith this very un-intuitive setup, let's look at a few entries 
  141. Xfrom the domains database and then see how they work:
  142. X
  143. X.nf
  144. X.ft CW
  145. X.zf
  146. X.in .5i
  147. X\&.EUR.UUCP, , , %R!%U
  148. X\&.ATT.COM, >att, , %P!%D!%U
  149. X\&.HP.COM, , , %R!%U
  150. X\&.UUCP, , , %R!%U
  151. X\&.COM, >hplabs, , %P!%U@%D
  152. X\&.CSNET, >hplabs, , %P!18:12:00%%D@CSNET-RELAY.ARPA
  153. X\&.EDU, >hplabs, , %P!%U@%D
  154. X.ft 1
  155. X.fi
  156. X.in 0
  157. X
  158. X(Note the presence of a third field that is always null.
  159. XThis is for compatibility with the \f2uumail\f1 program.
  160. XAlso notice that there is a space after each and every comma,
  161. Xeven if that field has an entry.)
  162. X.pg
  163. XTo see how it all works, let's suppose that we want to send a message
  164. Xto `jad@cs.purdue.edu'.  This would break down into the following fields:
  165. X
  166. X.nf
  167. X.in .5i
  168. X%U = \f2jad\f1
  169. X%N = \f2cs\f1
  170. X%D = \f2cs.purdue.edu\f1
  171. X.in 0
  172. X      
  173. X.fi
  174. XWhen the \f3Elm\f1 program matches the \f2.edu\f1  entry
  175. X
  176. X.nf
  177. X.in .5i
  178. X.ft CW
  179. X.zf
  180. X\&.EDU, >hplabs, , %P!%U@%D
  181. X.ft 1
  182. X.in 0
  183. X
  184. X.fi
  185. Xthe other field instantiated would be:
  186. X
  187. X.nf
  188. X.in .5i
  189. X%P = \f2path to hplabs\f1
  190. Xtemplate = \f2%P!%U@%D\f1
  191. X.in 0
  192. X.fi
  193. X
  194. XIf, say, our path to \f2hplabs\f1 was \f2hpcnoe!hplabs\f1, then
  195. Xthe fully expanded address would be:
  196. X
  197. X.nf
  198. X.ft CW
  199. X.zf
  200. X.in .5i
  201. Xhpcnoe!hplabs!jad@cs.purdue.edu
  202. X.ft 1
  203. X.in 0
  204. X.fi
  205. X
  206. X\f1and so on.  
  207. X.sp
  208. XWhat does this mean to the average user?  It means that you can
  209. Xfor the most part send mail to people on different networks by
  210. Xsimply using their full address, including any domain information, 
  211. Xso that mail to addresses like ``Jack@AI.MIT.EDU'' will work, 
  212. Xa message to ``SueAnn@BBN.MAILNET'' will work and so on!
  213. X.sp
  214. X.hn 1 Other Stuff not Covered Yet
  215. X
  216. XProbably the biggest question you have in your mind right now
  217. Xis ``But how the heck does this relate to my existing \f2Berkeley Mail\f1
  218. Xaliases and the lower-level \f2sendmail\f1 alias system??''  Well,
  219. Xrest assured that if you \f2really\f1 want to have
  220. Xyour aliases down in the transport you can.  No problem.  All you'll
  221. Xneed to do is to turn off the address validation routine in \f3Elm\f1.
  222. X.pg
  223. XAnd for those ex-\f2Berkeley Mail\f1 fans, you can translate your 
  224. Xaliases into the format that \f3Elm\f1 wants by running them
  225. Xthrough the \f2awk\f1 script listed in the appendix.
  226. X.pg
  227. XFinally, if you have any problems or questions, try looking in 
  228. Xthe \f2newalias\f1 manual entry, or dropping me a line at the
  229. X``usual'' email address.
  230. X.bp
  231. X.ce 99
  232. X\f3Appendix One
  233. XAn AWK Script for Translating Aliases from 
  234. Xa \f2Berkeley Mail\fP ``.mailrc'' File to an \f2Elm\fP ``.elm/aliases.text'' 
  235. XFile\f1
  236. X.ce 0
  237. X.sp 
  238. X.nf
  239. X
  240. X.ta .5i
  241. X.ft CW
  242. X.zf
  243. XBEGIN { print "# Elm .elm/aliases.text file, from a .mailrc file..." 
  244. X    print ""
  245. X    }
  246. Xnext_line == 1 { 
  247. X    next_line = 0;
  248. X    group = ""
  249. X    for (i = 1; i <= NF; i++) {
  250. X      if (i == NF && $i == "\\\\") sep = ""
  251. X      else                       sep = ", "
  252. X      if ($i == "\\\\") {
  253. X        group = sprintf("%s,", group)
  254. X        next_line = 1;
  255. X      }
  256. X      else if (length(group) > 0)
  257. X        group = sprintf("%s%s%s", group, sep, $i);
  258. X      else
  259. X        group = $i;
  260. X      }
  261. X      print "\\t" group
  262. X    }
  263. X$1 ~ /[Aa]lias | [Gg]roup/ { 
  264. X    if ( NF == 3)
  265. X      print $2 " = user alias = " $3;
  266. X    else {
  267. X      group = ""
  268. X      for (i = 3; i <= NF; i++) {
  269. X        if (i == NF && $i == "\\\\") sep = ""
  270. X        else        sep = ", "
  271. X        if ($i == "\\\\") {
  272. X          group = sprintf("%s,", group)
  273. X          next_line = 1;
  274. X        }
  275. X        else if (length(group) > 0) 
  276. X          group = sprintf("%s%s%s", group, sep, $i);
  277. X        else
  278. X          group = $i;
  279. X        }
  280. X        print $2 " = group alias = " group;
  281. X      }
  282. X    }
  283. X
  284. X.ft 1
  285. X.fi
  286. XNote: this script is contained in the release under the name ``mailrc.awk''
  287. Xin the utilities directory ``utils''.
  288. SHAR_EOF
  289. echo "File doc/Alias.guide is complete"
  290. chmod 0444 doc/Alias.guide || echo "restore of doc/Alias.guide fails"
  291. echo "x - extracting doc/Config.guid (Text)"
  292. sed 's/^X//' << 'SHAR_EOF' > doc/Config.guid &&
  293. X.\" @(#)$Id: Config.guid,v 4.1 90/04/28 22:41:00 syd Exp $
  294. X.\"
  295. X.\"  A guide to the ELM alias system and so on.
  296. X.\"  format with:
  297. X.\"      'troff tmac.n Config.guid > Config.fmtd'
  298. X.\"
  299. X.\"  (C) Copyright 1986, 1987 Dave Taylor
  300. X.\"  (C) Copyright 1988, 1989, 1990 Usenet Community Trust
  301. X.\"  Elm is now in the public trust. Bug reports, comments, suggestions, flames
  302. X.\"  etc. should go to:
  303. X.\"    Syd Weinstein        elm@DSI.COM (dsinc!elm)
  304. X.\"
  305. X.\"  $Log:    Config.guid,v $
  306. X.\" Revision 4.1  90/04/28  22:41:00  syd
  307. X.\" checkin of Elm 2.3 as of Release PL0
  308. X.\" 
  309. X.\"
  310. X.tm Have we been run through "tbl" first?? I hope so!
  311. X.po 1i
  312. X.ds h0
  313. X.ds h1
  314. X.ds h2
  315. X.ds f0
  316. X.ds f1
  317. X.ds f2
  318. X.nr Hy 1
  319. X.nr Pt 1
  320. X.nr Pi 0
  321. X.lg 0
  322. X.nf
  323. X.na
  324. X.rs
  325. X.za
  326. X.sp |3.0i
  327. X.ce 99
  328. X.ps 20
  329. X\f3Elm Configuration Guide\f1
  330. X.sp 4
  331. X.ps 12
  332. X.ss 14
  333. X.vs 14
  334. X\f2How to install and customize the Elm mail system\f1
  335. X.sp 2
  336. XDave Taylor
  337. X.sp
  338. XHewlett-Packard Laboratories
  339. X1501 Page Mill Road
  340. XPalo Alto CA
  341. X94304
  342. X.sp 3
  343. Xemail: taylor\s-1@\s+1hplabs.HP.COM  or  hplabs\s-1!\s+1taylor
  344. X.sp 3
  345. X>>> Elm is now in the public trust. Bug reports, comments, etc. to: <<<
  346. X.sp
  347. XSyd Weinstein
  348. XDatacomp Systems, Inc.
  349. X3837 Byron Road
  350. XHuntingdon Valley, PA 19006-2320
  351. X.sp
  352. Xemail: elm\s-1@\s+1DSI.COM  or  dsinc\s-1!\s+1elm
  353. X.sp 3
  354. X.ps 18
  355. X\f3\(co\f1\s12 Copyright 1986,1987 by Dave Taylor
  356. X.ps 18
  357. X\f3\(co\f1\s12 Copyright 1988, 1989, 1990 by The USENET Community Trust
  358. X.ps 10
  359. X.ss 12
  360. X.vs 12
  361. X.fi
  362. X.ad
  363. X.bp 1
  364. X.sv 5v
  365. X.ps 14
  366. X\f3Elm Configuration Guide\f1
  367. X.ds h0 "Elm Configuration Guide
  368. X.ds h1
  369. X.ds h2 "Version 2.3
  370. X.ds f0 "May 1, 1990
  371. X.ds f1 "Page %
  372. X.sp
  373. X.ps 10
  374. X(Version 2.3)
  375. X.sp 2
  376. XDave Taylor
  377. X.sp
  378. XHewlett-Packard Laboratories
  379. X1501 Page Mill Road
  380. XPalo Alto CA
  381. X94304
  382. X.sp 
  383. Xemail: taylor\s-1@\s+1hplabs.HP.COM  or  hplabs\s-1!\s+1taylor
  384. X.sp 2
  385. X>>> Elm is now in the public trust. Bug reports, comments, etc. to: <<<
  386. X.sp
  387. X.sp
  388. XSyd Weinstein
  389. XDatacomp Systems, Inc.
  390. X3837 Byron Road
  391. XHuntingdon Valley, PA 19006-2320
  392. X.sp
  393. Xemail: elm\s-1@\s+1DSI.COM  or  dsinc\s-1!\s+1elm
  394. X.sp 2
  395. XMay 1, 1990
  396. X.ce 0
  397. X.sp 3
  398. X.pg
  399. XThis document is intended as a supplement to the \f2Elm Users Guide\f1
  400. Xand \f2Elm Reference Guide\f1
  401. Xand should be of interest mainly to people at a site either installing
  402. Xor maintaining the source code to the \f3Elm\f1 mail system, or
  403. Xmodifying the code.
  404. X.sp 
  405. XIt is \f2required\f1 that installation be done by using the
  406. X\f2Configure\f1 script supplied with the system.  Please see the
  407. Xfile \f2Instruct\f1 for further information on running \f2Configure\f1.
  408. X.sp
  409. XThe remainder of this document will discuss the various questions
  410. Xasked by the \f2Configure\f1 script and the
  411. Xoptions available via direct editing of various files and
  412. Xparameters.  As indicated above, almost all of the sites that install
  413. X\f3Elm\f1 should find the \f2Configure\f1 script more than
  414. Xsufficient.
  415. X.hu Using Configure
  416. X.pg
  417. X\f2Configure\fP is a shell script that will automatically determine the
  418. Xtype of system it is running on and tune the parameters of Elm to fit
  419. Xthat system and its environment.  Where the installer has a choice, it
  420. Xasks questions of the installer.  \f2Configure\fP provides its own
  421. Xinstructions when run, so they are not repeated here.  However, when
  422. Xthe installer is presented with a choice, this next section explains
  423. Xsome of the options available.  Not all the questions or options to
  424. Xthose questions are explained.
  425. X.sp 2
  426. X.pg
  427. XEnable calendar feature?
  428. X.sp
  429. XElm has a feature to take specially marked lines within mail messages
  430. Xand add them to a file for use by the system calendar program.  The
  431. Xcommand to do this extraction needs to be enabled to work.  There is
  432. Xalso a follow on question regarding the name of the calendar file:
  433. X.pg
  434. XDefault calendar file?
  435. X.sp
  436. Xwhich is usually calendar on most systems.  This file will reside in the
  437. Xusers home directory, not their .elm directory.
  438. X.pg
  439. XDoes your /etc/passwd file keep full names in Berkeley/V7 format (name
  440. Xfirst thing after ':' in GCOS field)?
  441. X.sp
  442. XElm uses the full name from the password file if it is available.
  443. XThere are two major ways this name is stored.  Berkeley/V7 systems
  444. Xplace the name as the entire GCOS field string, that is it starts
  445. Xdirectly after the ':' that delimits the fields.  USG
  446. X.ux " Systems" (
  447. XGroup, or AT&T) systems put the users name after a department number
  448. Xand separate it from that number by a '-'.  The end of the users full
  449. Xname in these systems is a '('.  Look at your /etc/password file and if
  450. Xeither version applies, answer yes to that version.  If neither
  451. Xapplies, answer no.  Elm can still get the users name from the
  452. X".fullname" file in their home directory.
  453. X.pg
  454. XEvery now and then someone has a (gethostname, uname) that lies about
  455. Xthe hostname but can't be fixed for political or economic reasons.
  456. XWould you like to pretend (gethostname, uname) isn't there and maybe
  457. Xcompile in the hostname?
  458. X.sp
  459. XElm needs to know the correct name of the host on which it is executing
  460. Xto be able to create the proper headers for the outbound mail.  Some systems
  461. Xuse one name for uucp and another name for the system and others just don't
  462. Xreply to the subroutines with the proper name.  In this case it will be
  463. Xnecessary to compile in the name.  In all other cases this should not
  464. Xbe needed.  It is provided just in case there is a problem with your
  465. Xsystem.
  466. X.pg
  467. XDoes your mailer understand INTERNET addresses?
  468. X.sp
  469. XElm will work with systems that can process the `@' character of INTERNET
  470. Xformat addresses or with the `!' format of uucp addresses.  If your
  471. Xmail delivery agent understands the `@' format addresses, they should be
  472. Xused and this question is answered yes.  If when you send mail with the
  473. X`@' format addresses (such as elm@dsi.com), they bounce, then answer this
  474. Xquestion no.
  475. X.pg
  476. XAm I going to be running as a setgid program?
  477. X.sp
  478. XOn USG type systems and many other types,
  479. Xaccess to the mailboxes and the mailbox directory
  480. Xis via the group permissions.  The mail user agents, such as Elm, need
  481. Xwrite access into this directory to be able to move the mailbox around
  482. Xdue to internal editing and to create lock files.  If the permissions
  483. Xon your mailbox directory are drwxrwxr-x, then Elm needs to be a setgid
  484. Xprogram.
  485. X.pg
  486. XWhat is the default editor on your system?
  487. X.sp
  488. XIf no editor is specified in the users \f2.elm/elmrc file,\f1 this is which
  489. Xeditor to use.  The editor is used to compose outbound mail messages.
  490. X.pg
  491. XWhat pager do you prefer to use with Elm?
  492. X.sp
  493. XThis is the standard pager to use for reading messages.
  494. XBesides the usual system pagers, two Elm specific internal options
  495. Xexist: builtin and builtin+.  The built-in pager is faster to execute
  496. Xbut much less flexible than the system provided pagers.  The + version
  497. Xjust clears the page before displaying the next page.  Otherwise the
  498. Xtwo versions are identical.
  499. X.hu Other Configurable Parameters
  500. X.pg
  501. XThe following parameters rarely need to be changed, but are provided if
  502. Xyou need them.  \f2Configure\fP does not prompt for their values.  To
  503. Xchange them, edit the \f2hdrs/sysdefs.h\f1 file directly after running
  504. XConfigure.
  505. X.lp FIND_DELTA 1.0i
  506. XThis is the delta that the binary search of the pathalias database
  507. Xwill use to determine when it's slicing up a single line, rather than
  508. Xa multitude of lines.   Ideally, this should be set to 1 byte less
  509. Xthan the shortest line in the file...the default is 10 bytes.
  510. X.lp MAX_IN_WEEDLIST 1.0i
  511. XThe maximum number of headers that can be specified in the weedout
  512. Xlist of the \f2.elm/elmrc\f1 file.  A suggested alternative approach if this
  513. Xnumber is too small is to specify initial substrings in the file
  514. Xrather than increasing the number.  For example, say you want to 
  515. Xweedout the headers ``Latitude:'' and ``Latitudinal-Coords:'', you
  516. Xcould simply specify ``Latitud''" and match them both!  Furthermore
  517. Xyou could also specify headers like ``X-'' and remove all the user
  518. Xdefined headers!
  519. X.lp MAX_HOPS 1.0i
  520. XWhen replying to a G)roup, this is the maximum number of hops that
  521. Xa message can have taken.  This is used to try to optimize the 
  522. Xreturn address (remove cyclic loops and so on) and regular use
  523. Xshould show that the default of 35 is plenty more than you'll
  524. Xever need!
  525. X.lp system_text_file 1.0i
  526. XThis is the source text file for the system level aliases.
  527. XSee either the \f2newalias(1L)\f1 man page, or \f2The Elm
  528. XAlias System Users Guide\f1 for further details.
  529. X.lp system_hash_file 1.0i
  530. XThis is the file that contains the hashed version of the system 
  531. Xaliases.  
  532. X.lp system_data_file 1.0i
  533. XThis is the other file the \f2newalias\f1 command installs in the system
  534. Xalias area and contains the actual addresses for each of the aliases
  535. Xcontained in the hashed data file.
  536. X.lp ALIAS_TEXT 1.0i
  537. XThis is where the individual users alias text file lives.
  538. X.lp ALIAS_HASH 1.0i
  539. XWhere the hashed aliases are stored,
  540. X.lp ALIAS_DATA 1.0i
  541. Xand where the alias address data itself is kept.
  542. X.lp DEBUGFILE 1.0i
  543. XThe name of the file to put in the users home directory if they choose to
  544. Xuse the `-d' debug option. 
  545. X.lp OLDEBUG 1.0i
  546. XThe name of the file to save the previous debug output as.  (this feature
  547. Xwas added to ensure that users wanting to mail bug reports wouldn't 
  548. Xautomatically overwrite the debug log of the session in question)
  549. X.lp temp_lock_dir 1.0i
  550. XDirectory for lock files for XENIX.
  551. X.lp temp_file 1.0i
  552. XTemporary file for sending outbound messages.
  553. X.lp temp_form_file 1.0i
  554. XA place to store temporary forms (for Forms Mode) while answering them.
  555. X.lp temp_mbox 1.0i
  556. XPlace to keep copy of incoming mailbox to avoid collisions with newer
  557. Xmail.
  558. X.lp temp_print  1.0i
  559. XFile to use when creating a printout of a message.
  560. X.lp temp_edit 1.0i
  561. XFile to use when editing the mailbox file on XENIX.
  562. X.lp temp_uuname 1.0i
  563. XWhere to redirect output of the \f2uuname(1M)\f1 command.
  564. X.lp mailtime_file 1.0i
  565. XFile to compare date to to determine if a given message is New
  566. Xsince the last time the mail was read or not.
  567. X.lp readmsg_file 1.0i
  568. XFile to use when communicating with the \f2readmsg\f1 program (see
  569. Xthat program for more information)
  570. X.lp smflags  1.0i
  571. XDefines the flags to hand to \f2sendmail\f1 if and when the program
  572. Xchooses to use it.
  573. X.lp smflagsv 1.0i
  574. XDefines the flags to hand to \f2sendmail\f1 in verbose voyuer mode.
  575. X.lp mailer 1.0i
  576. XIf you don't have \f2sendmail\f1, this is the mailer that'll be used.
  577. X.lp helpfile 1.0i
  578. XThe help file name prefix.
  579. X.lp ELMRC_INFO 1.0i
  580. XThe file containing textual messages associated with each
  581. X\f3Elm\f1 variable setting in the users \f2``.elm/elmrc''\f1
  582. Xfile.  This is used when the user chooses to auto-save the
  583. Xoptions from within the main program.
  584. X.lp elmrcfile 1.0i
  585. XThe name of the automatic control file within the \f2.elm\f1
  586. Xdirectory. (currently \f2elmrc\f1)
  587. X.lp old_elmrcfile 1.0i
  588. XWhen a new elmrc file is saved, the old one is also saved, being
  589. Xrenamed to whatever this identifier is set to.
  590. X.lp mailheaders  1.0i
  591. XThe name of the optional file that users may have that will be
  592. Xincluded in the headers of each outbound message.
  593. X.lp dead_letter 1.0i
  594. XIf the user decides not to send a message it will instead be saved
  595. Xto this filename in their home directory.
  596. X.lp unedited_mail 1.0i
  597. XIn the strange case when the mailer suddenly finds all the directories
  598. Xit uses shut off (like \f2/usr/mail\f1 and \f2/tmp\f1) 
  599. Xthen it'll put the current
  600. Xmailbox into this file in the users home directory.
  601. X.lp newalias 1.0i
  602. XHow to install new aliases..(note: you MUST have the '-q' flag!)
  603. X.lp readmsg 1.0i
  604. XWhat the \f2readmsg(1L)\f1 program is installed as.
  605. SHAR_EOF
  606. chmod 0444 doc/Config.guid || echo "restore of doc/Config.guid fails"
  607. echo "x - extracting doc/Elm.cover (Text)"
  608. sed 's/^X//' << 'SHAR_EOF' > doc/Elm.cover &&
  609. X.\" @(#)$Id: Elm.cover,v 4.1 90/04/28 22:41:01 syd Exp $
  610. X.\"
  611. X.\"  Cover sheet for the ELM mail system...
  612. X.\"  format with 
  613. X.\"    troff tmac.n Elm.cover > Coversheet.fmtd'
  614. X.\"
  615. X.\"  Elm is now in the public trust. Bug reports, comments, suggestions, flames
  616. X.\"  etc. should go to:
  617. X.\"    Syd Weinstein        elm@DSI.COM (dsinc!elm)
  618. X.\"
  619. X.\"  (C) Copyright 1986, 1987 Dave Taylor
  620. X.\"  (C) Copyright 1988, 1989, 1990 Usenet Community Trust
  621. X.\"
  622. X.\"  $Log:    Elm.cover,v $
  623. X.\" Revision 4.1  90/04/28  22:41:01  syd
  624. X.\" checkin of Elm 2.3 as of Release PL0
  625. X.\" 
  626. X.\"  
  627. X.po 1i
  628. X.ds h0
  629. X.ds h1
  630. X.ds h2
  631. X.ds f0
  632. X.ds f1
  633. X.ds f2
  634. X.nr Hy 1
  635. X.nr Pt 1
  636. X.nr Pi 8
  637. X.lg 0
  638. X.nf
  639. X.na
  640. X.rs
  641. X.za
  642. X.sv |3.0i
  643. X.ce 99
  644. X.ps 25
  645. X\fBThe \s26Elm\s25 Mail System\fR
  646. X.sp 2
  647. X.ps 14
  648. X.ss 16
  649. X.vs 16
  650. X\fIA Replacement Mailer for All Unix Systems\fR
  651. X.sp 3
  652. XDave Taylor
  653. X.sp
  654. XHewlett-Packard Laboratories
  655. X1501 Page Mill Road
  656. XPalo Alto CA
  657. X94304
  658. X.sp
  659. Xemail: taylor\s12@\s14hplabs \ or \ hplabs!taylor
  660. X.sp 4
  661. X>>> Elm is now in the public trust. Bug reports, comments, etc. to: <<<
  662. X.sp
  663. XSyd Weinstein
  664. XDatacomp Systems, Inc.
  665. X3837 Byron Road
  666. XHuntingdon Valley, PA 19006-2320
  667. X.sp
  668. Xemail: elm\s-1@\s+1DSI.COM  or  dsinc\s-1!\s+1elm
  669. SHAR_EOF
  670. chmod 0444 doc/Elm.cover || echo "restore of doc/Elm.cover fails"
  671. echo "x - extracting doc/Filter.guid (Text)"
  672. sed 's/^X//' << 'SHAR_EOF' > doc/Filter.guid &&
  673. X.\" @(#)$Id: Filter.guid,v 4.1 90/04/28 22:41:03 syd Exp $
  674. X.\"
  675. X.\"  A guide to the Elm Filter program
  676. X.\"  format with:
  677. X.\"     'tbl tmac.n Filter.guid | troff > Filter.format'
  678. X.\"
  679. X.\"  (C) Copyright 1986, 1987 Dave Taylor
  680. X.\"  (C) Copyright 1988, 1989, 1990 Usenet Community Trust
  681. X.\"
  682. X.\"  Elm is now in the public trust. Bug reports, comments, suggestions, flames
  683. X.\"  etc. should go to:
  684. X.\"    Syd Weinstein        elm@DSI.COM (dsinc!elm)
  685. X.\"
  686. X.\"  $Log:    Filter.guid,v $
  687. X.\" Revision 4.1  90/04/28  22:41:03  syd
  688. X.\" checkin of Elm 2.3 as of Release PL0
  689. X.\" 
  690. X.\" Revision 3.8  90/03/26  15:12:06  syd
  691. X.\"
  692. X.tm Have we been run through "tbl" first?? I hope so!
  693. X.po 1i
  694. X.ds h0
  695. X.ds h1
  696. X.ds h2
  697. X.ds f0
  698. X.ds f1
  699. X.ds f2
  700. X.nr Hy 1
  701. X.nr Pt 1
  702. X.nr Pi 8
  703. X.lg 0
  704. X.nf
  705. X.na
  706. X.rs
  707. X.za
  708. X.sp |3.0i
  709. X.ce 99
  710. X.ps 20
  711. X.ss 18
  712. X.vs 12
  713. X\f3The Elm Filter System Guide\f1
  714. X.sp 4
  715. X.ps 12
  716. X.ss 14
  717. X.vs 14
  718. X\f2What the filter program is, what it does,
  719. Xand how to use it\f1
  720. X.sp 2
  721. XDave Taylor
  722. X.sp
  723. XHewlett-Packard Laboratories
  724. X1501 Page Mill Road
  725. XPalo Alto CA
  726. X94304
  727. X.sp 3
  728. Xemail: taylor\s-1@\s+1hplabs.HP.COM  or  hplabs\s-1!\s+1taylor
  729. X.sp 3
  730. X>>> Elm is now in the public trust. Bug reports, comments, etc. to: <<<
  731. X.sp
  732. XSyd Weinstein
  733. XDatacomp Systems, Inc.
  734. X3837 Byron Road
  735. XHuntingdon Valley, PA 19006-2320
  736. X.sp
  737. Xemail: elm\s-1@\s+1DSI.COM  or  dsinc\s-1!\s+1elm
  738. X.sp 3
  739. X.ps 18
  740. X\f3\(co\f1\s12 Copyright 1986, 1987 by Dave Taylor
  741. X.ps 18
  742. X\f3\(co\f1\s12 Copyright 1988, 1989, 1990 by The USENET Community Trust
  743. X.ps 10
  744. X.ss 12
  745. X.vs 12
  746. X.fi
  747. X.ad
  748. X.bp 1
  749. X.sv 5v
  750. X.ps 14
  751. X\f3The Elm Filter System Guide\f1
  752. X.ds h0 "Elm Filter Guide
  753. X.ds h2 "Version 2.3
  754. X.ds f0 "May 1, 1990
  755. X.ds f1 "Page %
  756. X.sp
  757. X.ps 10
  758. X(Version 2.3)
  759. X.sp 2
  760. XDave Taylor
  761. X.sp
  762. XHewlett-Packard Laboratories
  763. X1501 Page Mill Road
  764. XPalo Alto CA
  765. X94304
  766. X.sp 
  767. Xemail: taylor\s-1@\s+1hplabs.HP.COM  or  hplabs\s-1!\s+1taylor
  768. X.sp 2
  769. X>>> Elm is now in the public trust. Bug reports, comments, etc. to: <<<
  770. X.sp
  771. XSyd Weinstein
  772. XDatacomp Systems, Inc.
  773. X3837 Byron Road
  774. XHuntingdon Valley, PA 19006-2320
  775. X.sp
  776. Xemail: elm\s-1@\s+1DSI.COM  or  dsinc\s-1!\s+1elm
  777. X.sp 2
  778. XMay 1, 1990
  779. X.ce 0
  780. X.sp 3
  781. X.pg
  782. XOne of the greatest problems with the burgeoning electronic mail
  783. Xexplosion is that I tend to get lots of mail that I don't care about.
  784. XAmusingly, perhaps, I have the equivalent of electronic junk mail.
  785. XNot amusing, however, is the fact that this can rapidly 
  786. Xaccumulate and end up taking over my mailbox.
  787. X.pg
  788. XAt the same time I often get mail that, while it is interesting
  789. Xand important, can easily be filed to be read later, without ever
  790. Xactually having to cluttering up my incoming mailbox.
  791. X.sp 2
  792. XThis, then, is what \f2filter\f1 does!  The \f2filter\f1 program
  793. Xallows you to define a set of rules by which all incoming mail should
  794. Xbe screened, and a subsequent set of actions to perform based on whether
  795. Xthe conditions were met or not.  \f2Filter\f1 also has the ability to mail
  796. Xa summary of what actions it performed on the incoming mail as often as
  797. Xyou'd like.
  798. X.ne 5
  799. X.hu Writing the Rules
  800. X.sp
  801. XThe language for writing \f2filter\f1 rules is pretty simple, actually.
  802. XThe fundamental structure is;
  803. X.nf
  804. X.ti .5i
  805. Xif  (\f2condition\f1)  then  \f2action\f1
  806. X.fi
  807. XWhere \f2condition\f1 is constructed by an arbitrary number of 
  808. Xindividual conditions of the form ``\f2field\f1  \f2relation\f1  \f2value\f1''.
  809. X(an optional further type of rule is of the form ``always \f2action\f1''
  810. Xbut should only be used as the last rule in the ruleset, for obvious
  811. Xreasons).
  812. XThe \f2field\f1 value can be;
  813. X.nf
  814. X.in .5i
  815. Xsubject
  816. Xfrom
  817. Xto
  818. Xlines
  819. Xcontains
  820. X.in 0
  821. X.fi
  822. Xwhere, if ``lines'' is chosen, the \f2relation\f1 can be any of the
  823. Xstandard relationships (`>', `<', `>=', `<=', `!=' and `=').  
  824. XIf another action is
  825. Xchosen, ``contains'' can be used as the relation, ``='', or, if you'd
  826. Xlike, you can skip the relationship entirely (e.g. `subject "joe"').
  827. XThe \f2value\f1 is any quoted string that is to be matched against
  828. Xor number if ``lines'' is the field being considered.
  829. X.sp
  830. XIndividual conditions are joined together by using the word ``and'',
  831. Xand the logic of a condition can be flipped by using ``not'' as the
  832. Xfirst word (e.g. `not subject "joe"').  We'll see more examples of
  833. Xthis later.
  834. X.sp
  835. XNote that the ``or'' logical conjunction isn't a valid part of the
  836. X\f2filter\f1 conditional statement.  
  837. X.sp
  838. XFinally, <\f2action\f1> can be any of;
  839. X.nf
  840. X.in .5i
  841. Xdelete
  842. Xsave   \f2foldername\f1
  843. Xsavecopy  \f2foldername\f1
  844. Xforward  \f2address\f1
  845. Xexecute  \f2command\f1
  846. Xleave
  847. X.in 0
  848. X.fi
  849. Xwhere they result in the actions;  \f3delete\f1 deletes the message;
  850. X\f3save\f1 saves a copy of the message in the specified foldername;
  851. X\f3savecopy\f1 does the same as save, but also puts a copy in your mailbox;
  852. X\f3forward\f1 sends the message to the specified address; 
  853. X\f3execute\f1 feeds the message to the specified command (or complex
  854. Xsequence of commands) as standard input;
  855. Xand \f3leave\f1 leaves the message in your mailbox.
  856. X.sp
  857. XFoldernames can contain any of a number of macros, too, as we'll see in
  858. Xthe example ruleset below.  The macros available for the string fields are;
  859. X.ft CW
  860. X.zf
  861. X.TS
  862. Xcenter;
  863. Xlf3 lf3
  864. Xl l.
  865. XMacro    Meaning
  866. X.ft CW
  867. X.zf
  868. X%d    day of the month
  869. X%D    day of the week (0-6)
  870. X%h    hour of the day (0-23)
  871. X%m    month of the year (0-11)
  872. X%r    return address of message
  873. X%s    subject of original message
  874. X%S    ``Re: \f2subject of original message\fP''
  875. X.ft CW
  876. X.zf
  877. X%t    current hour and minute in HH:MM format
  878. X%y    year (last two digits)
  879. X.TE
  880. X.ft 1
  881. X.sp
  882. XThe rules file can also contain comments (any line starting with a `#')
  883. Xand blank lines.  
  884. X.sp 
  885. XThe file itself needs to reside in your .elm directory off your home directory and be 
  886. Xcalled \f2.elm/filter-rules\f1.  Here's an example:
  887. X.nf
  888. X.ft CW
  889. X.zf
  890. X # $HOME/.elm/filter-rules
  891. X #
  892. X # Filter rules for the Elm Filter program. Don't change without some
  893. X # serious thought. (remember - order counts)
  894. X #
  895. X # (for Dave Taylor)
  896. X # rule 1
  897. X if (from contains "!uucp") then delete
  898. X # rule 2
  899. X to "postmaster" ? save "/tmp/postmaster-mail.%d"
  900. X # rule 3
  901. X if (to "culture" and lines > 20) ? save "/users/taylor/Mail/culture"
  902. X # rule 4
  903. X subject = "filter test" ? forward "hpldat!test"
  904. X # rule 5
  905. X if [ subject = "elm" ] savecopy "/users/taylor/Mail/elm-incoming"
  906. X # rule 6
  907. X subject = "display-to-console" ? execute "cat - > /dev/console"
  908. X.fi
  909. X.ft 1
  910. X(notice the loose syntax \(em there are lots of valid ways to specify a
  911. Xrule in the \f2filter\f1 program!!)
  912. X.sp
  913. XTo translate these into English;
  914. X.sp
  915. X.nr TW \w'1. 'u
  916. X.in .5i
  917. X.ti -\n(TWu
  918. X1. All messages from uucp should be summarily deleted.
  919. X
  920. X.ti -\n(TWu
  921. X2. All mail to postmaster should be saved in a folder (file) called 
  922. X/tmp/postmaster-mail.\f2numeric-day-of-the-week\f1
  923. X
  924. X.ti -\n(TWu
  925. X3. All mail addressed to `culture' with at least 20 lines
  926. Xshould be automatically appended to the folder
  927. X/users/taylor/Mail/culture.
  928. X
  929. X.ti -\n(TWu
  930. X4. All messages that contain the subject `filter test' should be forwarded to
  931. Xme, but via the address `hpldat!test' (to force a non-user forward)
  932. X
  933. X.ti -\n(TWu
  934. X5. All messages with a subject that contains the word `elm' should be saved in
  935. Xthe folder ``/users/taylor/Mail/elm-incoming'' and also dropped into my
  936. Xmailbox.
  937. X
  938. X.ti -\n(TWu
  939. X6. Any message with the subject ``display-to-console'' will be immediately
  940. Xwritten to the console.
  941. X.in 0
  942. X.sp
  943. XNotice that the \f2order\f1 of the rules is very important.  If we, for 
  944. Xexample, were to get a message from `uucp' that had the subject `filter test',
  945. Xthe \f2filter\f1 program would match rule 1 and delete the message.  It 
  946. Xwould never be forwarded to `hpldat!test'.  It is for this reason that
  947. Xgreat care should be taken with the ordering of the rules.
  948. X.ne 5
  949. X.hu Checking the rules out
  950. X.sp
  951. XThe \f2filter\f1 program has a convenient way of check out the rules you 
  952. Xhave written.  Simply invoke it with the \f3-r\f1 (\f3r\f1ules) flag;
  953. X.nf
  954. X.in .5i
  955. X% \f3filter -r\f1
  956. X.ft CW
  957. X.zf
  958. X.in .5i+\w'Rule 1: 'u
  959. X.ti .5i
  960. XRule 1: if (from = "!uucp") then
  961. XDelete 
  962. X.ti .5i
  963. XRule 2: if (to = "postmaster") then
  964. XSave  /tmp/postmaster-mail.<day-of-week>
  965. X.ti .5i
  966. XRule 3: if (to = "culture" and lines > 20) then
  967. XSave  /users/taylor/Mail/culture
  968. X.ti .5i
  969. XRule 4: if (subject = "filter test") then
  970. XForward  hpldat!test
  971. X.ti .5i
  972. XRule 5: if (subject="elm") then
  973. XCopy  and  Save  /users/taylor/Mail/elm-incoming
  974. X.ti .5i
  975. XRule 6: if (subject="display-to-console") then
  976. XExecute "cat - > /dev/console"
  977. X.ft 1
  978. X.in 0
  979. X.fi
  980. X.sp
  981. X.ft 1
  982. XThere are a few things to notice \(em first off, these are the parsed and
  983. Xrebuilt rules, so we can see that they are all in a 
  984. Xconsistent format.  Also, notice on the filename for rule 2 that the
  985. Xprogram has correctly expanded the ``%d'' macro to be the day of the 
  986. Xweek.
  987. X.sp
  988. XIt is \f3highly\f1 recommended that you always check your ruleset before
  989. Xactually letting the program use it!
  990. X.ne 5
  991. X.hu Actually Using the Program
  992. X.sp
  993. XNow the bad news.  If you aren't running \f2sendmail\f1 you cannot use
  994. Xthis program as currently written.  Why?  Because the \f2filter\f1
  995. Xprogram expects to be put in your \f2.forward\f1 file and that is something
  996. Xthat only \f2sendmail\f1 looks at!
  997. X.sp
  998. XThe format for the entry in the \f2.forward\f1 file (located in your
  999. Xhome directory) is simply;
  1000. X.nf
  1001. X.ti .5i
  1002. X"| /usr/local/bin/filter"
  1003. X.fi
  1004. XAllright, it isn't quite \f2that\f1 simple!  Since \f2filter\f1 will be invoked
  1005. Xby processes that don't know where you are logged in, you need to have some
  1006. Xway to trap the error messages.  For ease of use, it was decided to have all
  1007. Xthe messages written to the file specified by `-o' (or \f2stderr\f1)
  1008. Xwhich means that you have two main
  1009. Xchoices for the actual entry.  Either;
  1010. X.nf
  1011. X.ti .5i
  1012. X"| /usr/local/bin/filter -o /dev/console"
  1013. X.fi
  1014. Xwhich will log all errors on the system console (each error is prefixed with
  1015. X``filter (\f2username\f1)'' to distinguish it), or;
  1016. X.nf
  1017. X.ti .5i
  1018. X"| /usr/local/bin/filter -o /tmp/joe.filter_errors"
  1019. X.fi
  1020. XIf you want to have a copy saved to a file.  Note that the quotes are a required
  1021. Xpart of the line.  A possible strategy would be
  1022. Xto have the errors written to a file and to then have a few lines in 
  1023. Xyour \f2.login\f1 script like:
  1024. X.nf
  1025. X.ft CW
  1026. X.zf
  1027. X.in .5i+\w'if 'u
  1028. X.ti .5i
  1029. Xif ( -f /tmp/joe.filter_errors) then
  1030. Xecho  "\ \ "
  1031. Xecho "Filter program errors;"
  1032. Xcat /tmp/joe.filter_errors
  1033. Xecho "\ \ "
  1034. X.ti .5i
  1035. Xendif
  1036. X.ft 1
  1037. X.in 0
  1038. X.ft 1
  1039. X.fi
  1040. XYou can also use the \f3-v\f1 flag in combination with the above to have
  1041. Xa more verbose log file saved by having
  1042. Xyour \f2.forward\f1 file;
  1043. X.nf
  1044. X"| /usr/local/bin/filter -vo /tmp/joe.filter_errors"
  1045. X.fi
  1046. XSuffice to say, you can get pretty tricky with all this!!
  1047. X.ne 5
  1048. X.hu Summarizing the Actions Taken
  1049. X.sp
  1050. XThe \f2Filter\f1 program keeps a log of all actions performed, including
  1051. Xwhat rules it matched against, in your .elm directory in a file 
  1052. Xcalled \f2.elm/filterlog\f1.  You can either directly operate on this file,
  1053. Xor, much more recommended, you can one of the two summarize flags to
  1054. Xthe program and let \f2it\f1 do the work for you!
  1055. X.sp
  1056. XThe difference between the two is best demonstrated by example:
  1057. X.nf
  1058. X% \f3filter -s\f1
  1059. X.ft CW
  1060. X.zf
  1061. X.in .5i
  1062. X                Summary of Filter Activity
  1063. X                \l'\w'Summary of Filter Activity'u-'
  1064. XA total of 418 messages were filtered:
  1065. XThe default rule of putting mail into your mailbox
  1066. X.in .5i+\w'Rule #1: 'u
  1067. Xapplied 364 times (87%)
  1068. X.ti .5i
  1069. XRule #1: (delete message)
  1070. Xapplied 1 time (0%)
  1071. X.ti .5i
  1072. XRule #2: (save in "/users/taylor/Filtered-Mail/netnews.12")
  1073. Xapplied 8 times (2%)
  1074. X.ti .5i
  1075. XRule #3: (save in "/users/taylor/Filtered-Mail/postmaster.12")
  1076. Xapplied 14 times (3%)
  1077. X.ti .5i
  1078. XRule #5: (save in "/users/taylor/Filtered-Mail/risks.12")
  1079. Xapplied 3 times (1%)
  1080. X.ti .5i
  1081. XRule #6: (save in "/users/taylor/Filtered-Mail/rays.12")
  1082. Xapplied 28 times (7%)
  1083. X.ft 1
  1084. X.ti 0
  1085. Xversus:
  1086. X.ti .5i
  1087. X% \f3filter -S\f1
  1088. X.ti .5i
  1089. X\f2the output as listed above, followed by:\f1
  1090. X.ft CW
  1091. X.zf
  1092. X.ti .5i
  1093. XExplicit log of each action;
  1094. X.ti .5i
  1095. XMail from taylor about Filter Summary
  1096. XPUT in mailbox: the default action
  1097. X.ti .5i
  1098. XMail from news@hplabsz.hpl.hp.com about Newsgroup comp.editors created
  1099. XPUT in mailbox: the default action
  1100. X.ti .5i
  1101. XMail from root about Log file: cleanuplog
  1102. XPUT in mailbox: the default action
  1103. X.ft 1
  1104. X.ti .5i
  1105. X[etc etc]
  1106. X.in 0
  1107. X.ft 1
  1108. X.fi
  1109. XTo actually use either of the summarizing options, there 
  1110. Xare two ways that are recommended;
  1111. X.sp
  1112. XThe preferred way is to have a line in either your \f2crontab\f1
  1113. X(ask your administrator for help with this) that invokes the \f2filter\f1
  1114. Xprogram as often as you desire with the \f3-s\f1 flag.  For example, I
  1115. Xhave a summary mailed to me every morning at 8:00 am:
  1116. X.nf
  1117. X.ft CW
  1118. X.zf
  1119. X   0 8 * * * "/usr/local/bin/filter -s | elm -s 'Filter Summary' taylor"
  1120. X.fi
  1121. X.sp
  1122. X.ft 1
  1123. XAn alternative is to have your \f2.login\f1 execute the command each time.
  1124. X.sp 2
  1125. XNote that if you want to have your log files cleared out each time the 
  1126. Xsummary is generated you'll need to use the '-c' flag too.  Also,
  1127. Xif you want to keep a long list of actions performed you can do this
  1128. Xby saving it as you display it.  A way to do this would be, if you were to
  1129. Xhave the invocation in your \f2.login\f1 script, to use:
  1130. X.nf
  1131. X.in .5i
  1132. X.ft CW
  1133. X.zf
  1134. Xecho "Filter Log;"
  1135. Xfilter -c -s | tee -a PERM.filter.log\f1
  1136. X.ft 1
  1137. X.in 0
  1138. X.fi
  1139. Xwhich would append a copy of all the output to the file `PERM.filter.log'
  1140. Xand would avoid you having to read larger and larger summaries of
  1141. Xwhat the program had done.
  1142. X.ne 5
  1143. X.hu Further Testing of the Ruleset
  1144. X.sp
  1145. XWith the \f2readmsg\f1 command available, it is quite easy to test the
  1146. Xrules you've written to see if they'll do what you desire.  
  1147. X.sp
  1148. XFor example, we can use the \f3-n\f1 flag to \f2filter\f1, which means
  1149. X`don't actually do this, just tell me what rule you matched, if any, and
  1150. Xwhat action you would have performed' (you can see why a single letter 
  1151. Xflag is easier to type in!!), and feed it each message in our mailbox 
  1152. Xby using a command like;
  1153. X.nf
  1154. X.in .5i
  1155. X% \f3set message=1\f1
  1156. X% \f3set total_messages=`messages`\f1
  1157. X% \f3while  (1)\f1
  1158. X> \f3if ($message > $total_messages) exit\f1
  1159. X> \f3echo processing message $message\f1
  1160. X> \f3readmsg -h $message | filter -n\f1
  1161. X> \f3echo " "\f1
  1162. X> \f3@ messages++\f1
  1163. X> \f3end\f1
  1164. X.in 0
  1165. X.fi
  1166. Xwhich will then hand each of the messages in your mailbox to the \f2filter\f1
  1167. Xprogram and display what action would have been taken with that message and
  1168. Xwhy.
  1169. X.sp
  1170. XFor example, if we do this for a few interesting messages in my mailbox,
  1171. Xwe'd end up with output like:
  1172. X.ft CW
  1173. X.zf
  1174. X.nf
  1175. X.in .5i
  1176. XMail from taylor about filter test
  1177. X.ti +\w'Mail 'u
  1178. XFORWARDED to hpldat!taylor by rule;
  1179. X.ti +\w'Mail   'u
  1180. Xsubject="filter test"  ? forward "hpldat!test"
  1181. XMail from bradley%hplkab@hplabsc about Re: AI-ED mailing address for HP
  1182. X.ti +\w'Mail 'u
  1183. XPUT in mailbox: the default action
  1184. XMail from taylor about display-to-console
  1185. X.ti +\w'Mail 'u
  1186. XEXECUTED "cat - > /dev/console"
  1187. X.ft 1
  1188. X.in 0
  1189. X.fi
  1190. X(sharp users will notice that this is exactly the same format as the longer
  1191. Xsummary listing)
  1192. X.ne 5
  1193. X.hu What Forwarded Messages Look Like
  1194. X.sp
  1195. XWhen a message is forwarded to another user by the \f2action\f1 being specified
  1196. Xas ``forward \f2address\f1'', then the program can generate one of two styles
  1197. Xof message.  If the message is to you, then it'll simply add it to your mailbox
  1198. Xin such a way as to ensure that the return address is that of the person who
  1199. Xsent the message and so on.
  1200. X.sp
  1201. XIf not, then the message is enclosed in a message of the form:
  1202. X.in \w'If 'u
  1203. X.ft CW
  1204. X.zf
  1205. X.nf
  1206. XFrom taylor Thu Oct  2 15:07:04 1986
  1207. XDate: Thu, 2 Oct 86 15:06:58 pdt
  1208. XSubject: "filter test"
  1209. XFrom: The filter of taylor@hpldat <taylor>
  1210. XTo: hpldat!taylor
  1211. XX-Filtered-By: filter, version 1.4
  1212. X-- Begin filtered message --
  1213. X
  1214. X.in +\w'-- 'u
  1215. XFrom taylor Thu Oct  2 15:06:41 1986
  1216. XDate: Thu, 2 Oct 86 15:06:33 pdt
  1217. XFrom: Dave Taylor <taylor>
  1218. XSubject: filter test
  1219. XJust a simple test.
  1220. X.in -\w'-- 'u
  1221. X-- End of filtered message --
  1222. X.ft 1
  1223. X.in 0
  1224. X.fi
  1225. XThe subject of the actual message is the same as the subject of the 
  1226. Xmessage being forwarded, but in quotes.  The `From:'  field indicates
  1227. Xhow the message was sent, and the `X-Filtered-By:' identifies what
  1228. Xversion of filter is being used.
  1229. X.ne 5
  1230. X.hu Areas to Improve
  1231. X.sp
  1232. XWhile the \f2filter\f1 program as presented herein is obviously a
  1233. Xnice addition to the set of tools available for dealing with electronic
  1234. Xmail, there are some key features that are missing and will be added in
  1235. Xthe future based on demand.
  1236. X.sp
  1237. XAs I see it, the main things missing are;
  1238. X.in .5i
  1239. X
  1240. X.ti -\n(TWu
  1241. X1. The ability to use regular expressions in the patterns.  
  1242. XThis would be a \f2very\f1 nice feature!
  1243. X
  1244. X.ti -\n(TWu
  1245. X2. Perhaps more \f2actions\f1 available (but what?)
  1246. X
  1247. X.ti -\n(TWu
  1248. X3. Certainly the ability to filter based on any field or combination of
  1249. Xfields.  
  1250. X.in 0
  1251. X.ne 5
  1252. X.hu Warnings and Things to Look Out For
  1253. X.sp
  1254. XSince this is a pretty simple program, there are a few pitfalls, some
  1255. Xof which have already been mentioned;
  1256. X.sp
  1257. X\f3Order\f1 counts in the rules.  Beware!
  1258. X.sp
  1259. X\f3Matching\f1 is pretty simple \(em make sure your patterns are sufficiently
  1260. Xexclusive before having any destructive rules.
  1261. X.sp 2
  1262. XFinally, as with the rest of the \f3Elm\f1 mail system, I welcome feedback
  1263. Xand suggestion on how to improve this program!!
  1264. SHAR_EOF
  1265. chmod 0444 doc/Filter.guid || echo "restore of doc/Filter.guid fails"
  1266. echo "x - extracting doc/Form.guide (Text)"
  1267. sed 's/^X//' << 'SHAR_EOF' > doc/Form.guide &&
  1268. X.\" @(#)$Id: Form.guide,v 4.1 90/04/28 22:41:05 syd Exp $
  1269. X.\"
  1270. X.\"  A guide to using the Elm Forms mode
  1271. X.\"  format with:
  1272. X.\"    'troff tmac.n - > Forms.format'
  1273. X.\"
  1274. X.\"  Elm is now in the public trust. Bug reports, comments, suggestions, flames
  1275. X.\"  etc. should go to:
  1276. X.\"    Syd Weinstein        elm@DSI.COM (dsinc!elm)
  1277. X.\"
  1278. X.\"  (C) Copyright 1986, 1987 Dave Taylor
  1279. X.\"  (C) Copyright 1988, 1989, 1990 Usenet Community Trust
  1280. X.\"
  1281. X.\"  $Log:    Form.guide,v $
  1282. X.\" Revision 4.1  90/04/28  22:41:05  syd
  1283. X.\" checkin of Elm 2.3 as of Release PL0
  1284. X.\" 
  1285. X.\"  
  1286. X.po 1i
  1287. X.ds h0
  1288. X.ds h1
  1289. X.ds h2
  1290. X.ds f0
  1291. X.ds f1
  1292. X.ds f2
  1293. X.nr Hy 1
  1294. X.nr Pt 1
  1295. X.nr Pi 0
  1296. X.lg 0
  1297. X.nf
  1298. X.na
  1299. X.rs
  1300. X.\"  Define the big box macro for troff
  1301. X.de eb
  1302. X.sp -1    
  1303. X.nf
  1304. X.ie t \{\
  1305. X\h'-.5n'\L'|\\nau-1'\l'\\n(.lu+1n\(ul'\L'-|\\nau+1'\l'|0u-.5n\(ul'
  1306. X.\}
  1307. X.el \{\
  1308. X\h'-.5n'\l'\\n(.lu+1n'
  1309. X.\}
  1310. X.fi
  1311. X..
  1312. X.sv |3.0i
  1313. X.ce 99
  1314. X.ps 20
  1315. X.ss 18
  1316. X.vs 12
  1317. X\f3Elm Forms Mode Guide\f1
  1318. X.sp 3
  1319. X.ps 12
  1320. X.ss 14
  1321. X.vs 14
  1322. X\f2What Forms Mode is, how to use it to create
  1323. Xcustom forms, how to reply to forms, and how to
  1324. Xuse it for AT&T Mail messages\f1
  1325. X.sp 2
  1326. XDave Taylor
  1327. X.sp
  1328. XHewlett-Packard Laboratories
  1329. X1501 Page Mill Road
  1330. XPalo Alto CA
  1331. X94304
  1332. X.sp 3
  1333. Xemail: taylor\s-1@\s+1hplabs.HP.COM  or  hplabs\s-1!\s+1taylor
  1334. X.sp 3
  1335. X>>> Elm is now in the public trust. Bug reports, comments, etc. to: <<<
  1336. X.sp
  1337. XSyd Weinstein
  1338. XDatacomp Systems, Inc.
  1339. X3837 Byron Road
  1340. XHuntingdon Valley, PA 19006-2320
  1341. X.sp
  1342. Xemail: elm\s-1@\s+1DSI.COM  or  dsinc\s-1!\s+1elm
  1343. X.sp 3
  1344. X.ps 18
  1345. X\f3\(co\f1\s12 Copyright 1986, 1987 by Dave Taylor
  1346. X.ps 18
  1347. X\f3\(co\f1\s12 Copyright 1988, 1989, 1990 by The USENET Community Trust
  1348. X.ps 10
  1349. X.ss 12
  1350. X.vs 12
  1351. X.fi
  1352. X.ad
  1353. X.bp 1
  1354. X.sv 5v
  1355. X.ps 14
  1356. X\f3A Guide to Forms Mode in Elm\f1
  1357. X.ds h0 "Forms Mode Guide
  1358. X.ds h1
  1359. X.ds h2 "Version 2.3
  1360. X.ds f0 "May 1, 1990
  1361. X.ds f1 "Page %
  1362. X.sp
  1363. X.ps 10
  1364. X(Version 2.3)
  1365. X.sp 
  1366. XDave Taylor
  1367. X.sp
  1368. XHewlett-Packard Laboratories
  1369. X1501 Page Mill Road
  1370. XPalo Alto CA
  1371. X94304
  1372. X.sp 
  1373. Xemail: taylor\s-1@\s+1hplabs.HP.COM  or  hplabs\s-1!\s+1taylor
  1374. X.sp 2
  1375. X>>> Elm is now in the public trust. Bug reports, comments, etc. to: <<<
  1376. X.sp
  1377. X.sp
  1378. XSyd Weinstein
  1379. XDatacomp Systems, Inc.
  1380. X3837 Byron Road
  1381. XHuntingdon Valley, PA 19006-2320
  1382. X.sp
  1383. Xemail: elm\s-1@\s+1DSI.COM  or  dsinc\s-1!\s+1elm
  1384. X.sp
  1385. XMay 1, 1990
  1386. X.ce 0
  1387. X.sp 2
  1388. XWhile there are a lot of mail systems that allow the transmission 
  1389. Xof text and primitive pictures, to send and reply to more complex
  1390. Xforms is simply not possible.  \f3Elm\f1, however, took
  1391. Xthe forms mode implemented as part of the AT&T Mail package and has
  1392. Xexpanded on it to be a smoothly fit part of the overall mail system.
  1393. X.sp
  1394. XForms mode gives you the ability to send `template' files to people 
  1395. Xand receive the filled-in replies.\s-2\u1\d\s0
  1396. X.fn
  1397. X\f21. note that this feature assumes that the person on the other end
  1398. Xis also using the Elm mail system.\f1
  1399. X.ef
  1400. XLet's look at an example right off.
  1401. X.sp
  1402. XSay we were going to use computer mail as a way to file defects with
  1403. Xsoftware.  There is a certain amount of information we want to be able
  1404. Xto collect when each report is made, and if it is in a specific format
  1405. Xwe can use programs to file the defects upon receipt.
  1406. X.sp
  1407. XThe form we'll try to emulate starts out looking like:
  1408. X.\" A manual page break has been done because the 'sd' macro doesn't like
  1409. X.\" coming up right after the footer or just doesn't like going to a new
  1410. X.\" page by itself.  The bug has been reported.
  1411. X.bp
  1412. X.ft CW
  1413. X.zf
  1414. X.sd c
  1415. X.mk a
  1416. X.sp
  1417. X.tl ''Defect Reporting Form''
  1418. X.sp
  1419. X.tl 'Program:\ \l'2.3i-\w'Program:\ 'u'''Version:\ \l'1.7i-\w'Version:\ 'u''
  1420. X.tl 'Operating\ System:\ \l'2.3i-\w'Operating\ System:\ 'u'''Version:\ \l'1.7i-\w'Version:\ 'u''
  1421. X.sp
  1422. X.tl 'Defect\ Type:\ \l'2.3i-\w'Defect\ Type:\ 'u'''
  1423. X.sp
  1424. X.tl 'Date\ Found:\ \l'2.3i-\w'Date\ Found:\ 'u'''By\ Whom:\ \l'2.3i-\w'By\ Whom:\ 'u'\h'.2i''
  1425. X.tl 'Date\ Reported:\ \l'2.3i-\w'Date\ Reported:\ 'u'''Phone:\ \l'2.3i-\w'Phone:\ 'u'\h'.2i''
  1426. X.sp
  1427. X.tl 'Description:\ \l'6.4i-\w'Description:\ 'u''
  1428. X.tl '\l'6.4i''
  1429. X.tl '\l'6.4i''
  1430. X.sp
  1431. X.eb
  1432. X.ed
  1433. X.ft 1
  1434. X.sp
  1435. XThis form can actually be created almost exactly as listed above in 
  1436. Xthe \f3Elm\f1 mail system by using your standard editor and can then
  1437. Xbe mailed about as needed.
  1438. X.sp
  1439. XLet's say that we want a bit more information, however, especially with 
  1440. Xfields like ``Defect Type'', we want to list all the recommended answers.
  1441. XTo create the actual form, we need merely to replace the underlines in
  1442. Xthe above form with spaces.  The multi-line comments can simply be 
  1443. Xindicated by a `:' by itself on a line;
  1444. X
  1445. X.ft CW
  1446. X.zf
  1447. X.sd c
  1448. X.mk a
  1449. X.sp
  1450. X.tl ''Defect Reporting Form''
  1451. X.sp
  1452. X.tl 'Program:''Version:\h'1.7i-\w'Version:'u''
  1453. X.tl 'Operating System:''Version:\h'1.7i-\w'Version:'u''
  1454. X.sp
  1455. X.tl '(Valid Defect Types are: user-error, doc-error, fatal, other)'
  1456. X.tl 'Defect Type:''
  1457. X.sp
  1458. X.tl 'Date Found:''By\ Whom:\h'2.3i-\w'By\ Whom:'u''
  1459. X.tl 'Date Reported:''Phone:\h'2.3i-\w'Phone:'u''
  1460. X.sp
  1461. X.tl 'Description'
  1462. X.tl ':'
  1463. X.sp
  1464. XThank you for filling in this form.
  1465. X.sp 2
  1466. X.eb
  1467. X.ed
  1468. X.ft 1
  1469. X.sp
  1470. XAs we can see, it is quite simple to create forms!!  
  1471. X.sp 2
  1472. XNow that we have an idea what we're talking about, let's actually officially
  1473. Xdefine the system...
  1474. X.br
  1475. X.ne 5
  1476. X.hu Forms Mode Specification
  1477. X
  1478. X[Note that this is all taken from the document \f2Standard for Exchanging
  1479. XForms on AT&T Mail\f1, Version 1.9 of 6/7/86, from AT&T]
  1480. X.sp
  1481. XThe forms mode is really quite simple.  Simple enough that it is amazing
  1482. Xthat it hadn't been implemented before AT&T Mail came along!!
  1483. X.sp
  1484. XIn a nutshell, each field is delimited by a `:' followed by a number of
  1485. Xblank spaces or tabs that represent the valid size for that field.  That
  1486. Xis, if we have a line in the form like;
  1487. X.nf
  1488. X.ti .5i
  1489. X``Phone (area-code):\0\0\0\0\0Number:\0\0\0\0\0\0\0\0\0\0'' 
  1490. X.fi
  1491. XThe area-code field will be limited to three characters and the number to nine.
  1492. X(this is kind of hard to see with the proportionally spaced formatted copy,
  1493. Xalas).
  1494. XThe only exception to the rule is that a `:' by itself on a line represents
  1495. Xa field that is as large as the user entering the data desires.
  1496. X
  1497. XThe actual form that is transmitted, in AT&T Mail parlance, is a ``SIMPLE''
  1498. Xforms handler message (as opposed to the ``ADVANCED'' handler).  This means
  1499. Xthat it contains three sections;
  1500. X.br
  1501. X.ne 8
  1502. X.nf
  1503. X.in .5i
  1504. X.ft 2
  1505. XThe Message Header
  1506. X.ft CW
  1507. X.zf
  1508. X[\&OPTIONS-SECTION]
  1509. X***
  1510. X[\&FORMS-IMAGE]
  1511. X***
  1512. X[\&RULES-SECTION]\f1
  1513. X.in 0
  1514. X.fi
  1515. X\f3Elm\f1 generates form messages with the ``options'' section filled out,
  1516. Xbut ignores it when receiving mail.  The filled out section is:
  1517. X.ft CW
  1518. X.zf
  1519. X.nf
  1520. X.in .5i
  1521. XWIDTH=80
  1522. XTYPE=SIMPLE
  1523. XOUTPUT=TEXT\f1
  1524. X.in 0
  1525. X.fi
  1526. XThe FORMS-IMAGE section is that described above.  The RULES-SECTION can
  1527. Xcontain explicit rules about the possible values of each field, but 
  1528. Xthis is currently ignored by \f3Elm\f1, being a ``SIMPLE'' forms mode
  1529. Xmail system.
  1530. X.sp
  1531. XForms also have the header ``Content-Type: mailform'' to indicate to the
  1532. Xmail system (either \f3Elm\f1 or AT&T Mail) that a form is being sent.
  1533. X.sp
  1534. X\f3Elm\f1 further indicates that a form has been received by having an
  1535. X``F'' as the status character in the header display section (instead of
  1536. X``N'' for new, etc).
  1537. X.br
  1538. X.ne 5
  1539. X.hu Composing and Sending a Form
  1540. X
  1541. XThe first step to enable sending forms is to change the setting of
  1542. Xthe variable \f2forms\f1 in your \f2.elm/elmrc\f1 file to ``ON''.  E.g.:
  1543. X.nf
  1544. X.ti .5i
  1545. Xforms = ON
  1546. X.fi
  1547. XThe next step is to send the message to someone using the `m' (\f2mail\f1)
  1548. Xcommand.  This then will drop you into an editor.  Type in the form as
  1549. Xindicated above, with appropriate colons and comments, and end the entry
  1550. Xby leaving the editor.
  1551. X.sp
  1552. XThe prompt is now;
  1553. X.nf
  1554. X.ft CW
  1555. X.zf
  1556. X.tl ''Choose: E)dit msg, edit H)eaders, M)ake form, S)end or F)orget : @''
  1557. X.ft 1
  1558. X.fi
  1559. Xso we choose `m' \(em \f2Make form\f1.  The program then will either
  1560. Xrewrite the prompt without the M)ake form option, indicating that
  1561. Xthe form has been accepted, or will indicate the problem and give you
  1562. Xa chance to correct it.
  1563. X.sp
  1564. XOnce it has been accepted, simple use the `s' \(em \f2send message\f1 -
  1565. Xcommand and it's off!
  1566. X.sp 
  1567. X\f2Note that you cannot reply to a message with a Form.\f1
  1568. X.br
  1569. X.ne 6
  1570. X.hu Replying to a Form
  1571. X
  1572. XLet's reply to the form message we generated now.  The header page of the
  1573. X\f3Elm\f1 mail system will indicate that the message is a form by having
  1574. Xan `F' next to it.  So we use `r' to reply and the screen is immediately
  1575. Xcleared and we're prompted, field by field, for the data requested.
  1576. XEach field has underscores in the input area to indicate the size field that
  1577. Xis expected.
  1578. X.sp
  1579. XAfter answering all the questions we'll have a screen that looks like;
  1580. X
  1581. X.ft CW
  1582. X.zf
  1583. X.sd c
  1584. X.mk a
  1585. X.sp
  1586. X.tl ''Defect Reporting Form''
  1587. X.sp
  1588. X Program:  \f3The Elm Mail System\f1\l'3i-\w'\f3The Elm Mail System'u'
  1589. X Version:  \f31.5\f1\l'3i-\w'\f31.5'u'
  1590. X Operating System:  \f3HP-UX\f1\l'3i-\w'\f3HP-UX'u'
  1591. X Version:  \f35.141 C\f1\l'3i-\w'\f35.141 C'u'
  1592. X.sp
  1593. X (Valid Defect Types are: user-error, doc-error, fatal, other)
  1594. X Defect Type:  \f3fatal\f1\l'5i-\w'\f3fatal\f1'u'
  1595. X.sp
  1596. X Date Found:  \f310/9/86\f1\l'3i-\w'\f310/9/86\f1'u'
  1597. X By Whom:  \f3Dave Taylor\f1\l'3i-\w'\f3Dave Taylor\f1'u'
  1598. X Date Reported:  \f310/9/86\f1\l'3i-\w'\f310/9/86\f1'u'
  1599. X Phone:  \f3(415) 857-6887\f1\l'3i-\w'\f3(415) 857-6887\f1'u'
  1600. X.sp
  1601. X Description
  1602. X (Enter as many lines as needed, ending with a `.' by itself on a line)
  1603. X   \f3When running it on a CPM system I cannot compile successfully.\f1
  1604. X   \f3.\f1
  1605. X Thank you for filling in this form.
  1606. X.tl ''Choose: E)dit form, edit H)eaders, S)end or F)orget : @''
  1607. X.sp 
  1608. X.eb
  1609. X.ed
  1610. X.ft 1
  1611. X.sp
  1612. XQuite simple.  Notice, however, that the order of prompting is left to
  1613. Xright on each line, so the fields that on the form are placed in what
  1614. Xseems like a logical place, ``By Whom:'' and ``Phone:'' turn out to be
  1615. Xconfusing when filling in the actual form since it isn't clear what
  1616. X``Phone:'' is being asked for because of the intervention of the
  1617. X``Date Reported:'' field.
  1618. X.sp 
  1619. XThe message that will actually be sent out from this will have the
  1620. Xfields in a more acceptable format;
  1621. X.\" Force page break, as there seems to be a bug in the .sd macro
  1622. X.bp
  1623. X.\"
  1624. X.ft CW
  1625. X.zf
  1626. X.mk a
  1627. X.sp
  1628. X WIDTH=80
  1629. X TYPE=SIMPLE
  1630. X OUTPUT=TEXT
  1631. X ***
  1632. X.tl ''Defect Reporting Form''
  1633. X.sp
  1634. X.tl ' Program: The Elm Mail System''Version: 1.5\h'1.5i-\w'Version: 1.5'u''
  1635. X.tl ' Operating System: HP-UX''Version: 5.141 C\h'1.5i-\w'Version: 5.141 C'u''
  1636. X.sp
  1637. X.tl ' (Valid Defect Types are: user-error, doc-error, fatal, other)'
  1638. X.tl ' Defect Type: fatal''
  1639. X.sp
  1640. X.tl ' Date Found: 10/9/86''By Whom: Dave Taylor\h'2.3i-\w'By Whom: Dave Taylor'u''
  1641. X.tl ' Date Reported: 10/9/86''Phone: (415) 857-6887\h'2.3i-\w'Phone: (415) 857-6887'u''
  1642. X.sp
  1643. X.tl ' Description'
  1644. X.sp
  1645. X    When running it on a CPM system I cannot compile successfully.
  1646. X.sp 
  1647. X.tl ' Thank you for filling in this form.'
  1648. X ***
  1649. X.sp
  1650. X.eb
  1651. X.ft 1
  1652. X
  1653. X.hu Comments on Forms Mode
  1654. X
  1655. XAs was said at the beginning, this way of sending about forms could
  1656. Xprove to be very helpful and useful in a variety of contexts.  On the
  1657. Xother hand, until a more sophisticated forms language is used for the
  1658. Xforms, this should be sufficient to embody the power of the idea.
  1659. X.sp
  1660. XI welcome any comments and thoughts on this system and also welcome
  1661. Xpossible enhancements.
  1662. X.sp
  1663. XI also gratefully thank Dale DeJager of AT&T Information Systems 
  1664. Xfor sending me more
  1665. Xinformation on AT&T Mail than I could possibly digest in any finite
  1666. Xamount of time.
  1667. SHAR_EOF
  1668. echo "End of part 4"
  1669. echo "File doc/Form.guide is continued in part 5"
  1670. echo "5" > s2_seq_.tmp
  1671. exit 0
  1672.  
  1673. exit 0 # Just in case...
  1674.