home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / texted / zapemail_2 / !ZapEmail / !Help next >
Text File  |  1997-10-22  |  42KB  |  1,188 lines

  1.  ____           ___          _ _
  2. |_  /__ _ _ __| __|_ __  __ _(_) |
  3.  / // _` | '_ \ _|| '  \/ _` | | | 0.20a (5 October 1997)
  4. /___\__,_| .__/___|_|_|_\__,_|_|_| © Darren Salt, 1996/7
  5.      |_|
  6.  
  7. This software is COPYRIGHT, but has been released as FREEWARE. Please see the
  8. end of this file for conditions of use and distribution.
  9.  
  10.  
  11. A few definitions:
  12.  
  13. 'Blank line': may contain quoting characters and trailing spaces, eg. "> > ".
  14. 'Empty line': contains nothing.
  15. 'QP', 'qp'  : MIME quoted printable.
  16.  
  17. A logical line is one which starts after a line feed (or start of file) and
  18. is terminated by a line feed (or end of file), and as such may occupy one or
  19. more physical (or display) lines.
  20.  
  21.  
  22. Installation
  23. ————————————
  24.  
  25. As supplied, ZapEmail requires at least Zap 1.33. Locations of files are
  26. given using the Zap 1.35 directory structure.
  27.  
  28. If !Zap.3rdParty.Salt contains ZapEmail, then delete the ZapEmail module and
  29. its related files, leaving the ZapDS files in place. You should edit the
  30. ExternCmd file to remove the line referring to ZapEmail.
  31.  
  32. Now drag !ZapEmail into the 3rdParty directory.
  33.  
  34. You may need to edit the Types file a little before inserting it into your
  35. keys file, in place of any ZapEmail-related bits already in there.
  36.  
  37. ZapEmail relies, for its URL sending, on ZapDS 0.30, and for the emphasis
  38. buttons, on ZapJRF 1.19.
  39.  
  40.  
  41. Upgrading from earlier versions
  42. –––––––––––––––––––––––––––––––
  43.  
  44. Handled transparently, insofar as Zap's config file is concerned.
  45.  
  46. You should *always* ensure that the External file entry and HelpData text are
  47. up to date.
  48.  
  49. Upgrade notes for any given version also apply to older versions.
  50.  
  51. From 0.15, 0.16:
  52.     Email_ChangeQuoting & Email_IncQuoting now take string parameters - check
  53.     your keys and menus files (<Zap$Keys> and <Zap$Menus>), eg.
  54.     Email_ChangeQuoting '>'     becomes  Email_ChangeQuoting ">"
  55.     Email_IncQuoting 34     becomes  Email_IncQuoting """"
  56.  
  57. From 0.17, 0.18, 0.19 (up to pre-16):
  58.     Delete all files relating to ZapEmail (those matching the files in the
  59.     ZapEmail archive) *except for your taglines and signatures* from
  60.     !Zap.3rdParty.Salt, then copy !ZapEmail there. Move your taglines and
  61.     signatures (if you have any) into the newly-created !ZapEmail.
  62.  
  63. From 0.19 (up to pre-33):
  64.     If you have a directory !Zap.3rdParty.!Email, rename it to !ZapEmail.
  65.     If you have foreground emphasis selected as a saved option, force Email
  66.     mode to be loaded (it doesn't matter how) and save the options. (See also
  67.     the Email mode menu entry "Emphasis in foreground".)
  68.  
  69. *** Email_SendURL *will* be removed soon. Use SendURL (in ZapDS) instead.
  70.  
  71. The default script file relies on a command "CloseFile". If you have an old
  72. version of ZapDS, either upgrade it or change all occurrences of the command
  73. to "DS_CloseFile".
  74.  
  75.  
  76. The External file
  77. –––––––––––––––––
  78.  
  79. You'll need to update Zap's External file <Zap$External> - if you have
  80. MakeExtern (!Zap.3rdParty.Salt.MakeExtern; make sure it's v0.10, available
  81. from <URL:http://www.banoffee.demon.co.uk/arcsalt/zips/ZapExtern.zip>), just
  82. run that, else replace the section starting from the first line containing
  83. "ZapEmail" with the following:
  84.  
  85. <Zap$3rdParty>.!ZapEmail.ZapEmail Run <Zap$3rdParty>.!ZapEmail.!Setup
  86.     Email
  87.     -
  88.     EMAIL_FIXSIG            &0
  89.     EMAIL_STRIPSPCS            &10
  90.     EMAIL_STAMP            &0
  91.     EMAIL_DATE            &0
  92.     EMAIL_CHANGEQUOTING        &558
  93.     EMAIL_SENDURL            &0
  94.     EMAIL_FLAGSTOGGLE        &8010
  95.     EMAIL_SPLITFORINSERT        &8
  96.     EMAIL_INCQUOTING        &558
  97.     EMAIL_DECQUOTING        &0
  98.     EMAIL_ROTENCODE            &0
  99.     EMAIL_ROTENCODECUR        &0
  100.     EMAIL_SETFORMATMOD        &58
  101.     EMAIL_SETQUOTING        &10058
  102.     EMAIL_ADDQUOTINGCHR        &158
  103.     EMAIL_REMQUOTINGCHR        &158
  104.     EMAIL_ADDTAGLINE        &0
  105.     EMAIL_ADDSIGNATURE        &0
  106.     EMAIL_EDITTAGLINES        &7
  107.     EMAIL_EDITSIGFILES        &7
  108.     EMAIL_SNIP            &458
  109.     EMAIL_DECODEQP            &8
  110.     EMAIL_ENCODEQP            &0
  111.     EMAIL_ENCODE8BIT        &0
  112.     EMAIL_RETURNRECEIPTTO        &0
  113.     EMAIL_ANTISPAM            &18
  114.     EMAIL_ADDHEADERLINE        &18
  115.     EMAIL_BUTTONS            &8
  116.     -
  117.  
  118.  
  119. The Keys file
  120. –––––––––––––
  121.  
  122. You might also want to edit your keys file a little. The file "Types"
  123. contains suitable definitions.
  124.  
  125. My keys file has the following command string appended to the above:
  126.     :FFlags_Toggle &40
  127.     :Email_AddSignature
  128.     :Email_AddTagline
  129.     :Email_Stamp
  130.     :FFlags_Toggle &C320
  131. (all on one line, of course; split to aid legibility). This appends a random
  132. signature and tagline, regenerates the Date: and Message-ID: lines
  133. automatically, preventing that from being undone, and marks the buffer as
  134. unchanged.
  135.  
  136.  
  137. The HelpData file
  138. –––––––––––––––––
  139.  
  140. If you want brief help text available for ZapEmail, then you should append
  141. the file "Email Data" to the file !Zap.Docs.HelpData, or if it already
  142. contains ZapEmail help, you should replace the relevant part of the file
  143. (starts with "ZapEmail extensions" and may end with "| End ZapEmail").
  144.  
  145.  
  146. The Templates, Sprites, Scripts and Menus files
  147. –––––––––––––––––––––––––––––––––––––––––––––––
  148.  
  149. These files (with the exception of Menus) must be present if you wish to use
  150. ZapButtons. See the ZapButtons documentation for more details.
  151.  
  152. The Menus file is optional; if it is not present, clicking Menu on the button
  153. pane will open the ZapEmail mode menu. Any ZapEmail command is suitable for
  154. inclusion in a menu file, though Email_SetFormatMod and Email_SetQuoting may
  155. only be used as submenu pointers.
  156.  
  157.  
  158. And finally
  159. –––––––––––
  160.  
  161. Now quit Zap, if you have it loaded, and rerun it.
  162.  
  163. (I recommend that you turn off automatic space stripping in this mode.)
  164.  
  165.  
  166. The Email mode
  167. ——————————————
  168.  
  169. Think of text mode with email extensions :-)
  170.  
  171. By using this mode you gain the following advantages:
  172.  
  173. * Coloured headers
  174.     Those of us who don't get to see the headers are catered for too
  175.  
  176. * Coloured signatures
  177.     Helps you spot broken .sig separators too :-)
  178.  
  179. * Coloured quoting, up to four levels (then it repeats)
  180.     As inspired by Messenger
  181.     Can optionally colour some non-standard quoting methods
  182.  
  183. * Coloured URLs and addresses
  184.     Recognises any (absolute) URLs and email address in angle brackets
  185.     Knows about mailto: URLs and colours these as addresses
  186.  
  187. * Coloured *word*, _word_, /word/ and -word-
  188.     For added emphasis
  189.  
  190. * Long line warning
  191.     The background colour changes when the line is longer than the
  192.       display width or format width
  193.  
  194. * Quoted text reformatting
  195.     Via the normal text formatting mechanism
  196.     It won't let you format the header or the .sig separator
  197.     Join line, split line, linewrap and wordwrap know about quoting
  198.  
  199. * Automatic .sig separator repair and LF termination
  200.     Just before you save the message - if it's "--", it becomes "-- "
  201.     Also makes sure the message ends with a line feed
  202.  
  203. * Display width range check
  204.     The display width cannot be less than 8 columns
  205.  
  206. * Passing URLs to web browsers
  207.     Works with most browsers (I hope!)
  208.  
  209. * Automatic insertion of empty lines before your .sig
  210.     Only if the message is otherwise blank
  211.  
  212. * Knows about MIME quoted printable
  213.     Useful if your newsreader doesn't
  214.  
  215. * AST (Anti-Spam Technology)
  216.     Otherwise known as string substitution in the From: line
  217.  
  218. * ZapButtons and ZapSpell support
  219.     A nice little button pane for those awkward-to-remember functions,
  220.     and no mistake
  221.  
  222.  
  223. The Email mode menu
  224. –––––––––––––––––––
  225.  
  226. Buttons
  227.     This toggles the buttons pane on and off, and also leads to a submenu
  228.     in which you can alter a few buttons pane related flags.
  229.  
  230. Ignore header
  231.     This controls whether the header is coloured or not, and whether
  232.     editing controls (eg. no formatting) are applied when the cursor is
  233.     in the header. For those whose newsreaders don't export the header
  234.     with the message text for editing, this option should be switched on.
  235.  
  236. Don't add X headers
  237.     ZapEmail won't add its little advert or its antispam header lines if
  238.     this is ticked.
  239.  
  240. Ignore .sig separator
  241.     This controls whether signature colouring and auto-repair are
  242.     switched on. For those who don't use a .sig separator, switching this
  243.     option on will prevent ZapEmail from slowing things down by searching
  244.     for it, and warning you if it doesn't find one.
  245.  
  246. Don't reformat .sig
  247.     When enabled, any attempt to reformat the signature will be ignored,
  248.     exactly as for the header (ie. the cursor will move to the start of
  249.     the next line).
  250.     (Not relevant if the .sig separator is being ignored.)
  251.  
  252. Spaces in quoting
  253.     This controls the quoting style of reformatted text and whether
  254.     Email_IncQuoting inserts spaces in already-quoted lines - when on,
  255.     you get quoting like "> > > "; when off, you get ">>> " instead.
  256.  
  257. Format to display width
  258.     This ties the format width (normally the same as the wrap width) to
  259.     the display width, less an amount between 0 and 255, which can be set
  260.     from its submenu.
  261.     Setting that value or toggling the flag will cause a redraw.
  262.     Note that the actual format width used cannot be below 8: this is
  263.     taken care of for you.
  264.  
  265. Allow non-'>' quoting
  266.     This enables colouring and correct formatting of quoting using the
  267.     characters defined in the submenu (these default to :"| if none are
  268.     specified). You can have up to eight quoting characters plus '>'. The
  269.     other two submenu items should be obvious :-)
  270.  
  271. FormatText uses '>' quoting
  272.     When enabled, the FormatText command alters the quoting to the
  273.     standard form. When disabled, FormatText preserves the quoting style.
  274.     The quoting style, preserved or altered, is copied to following lines
  275.     in the same paragraph (as is the case with wordwrap).
  276.  
  277. Mangle ctrl chars
  278.     This causes all control characters to be inserted as "^<char>",
  279.     provided that they're entered using CHAR or are QUOTEd.
  280.     It also causes characters with codes between 128 and 159 to be
  281.     'translated' on saving, if they're in the message header. The
  282.     translation is:
  283.     F:  €    Ŵ   ŵ    ◰   ☓    Ŷ   ŷ       ⇦    ⇨   ⇩    ⇧   …    ™   ‰    •
  284.     T:  /    W   w    @   X    Y   y    87  <-    ->  v    ^   ...    TM  %.    ·
  285.     F:  ‘    ’   ‹    ›   “    ”   „    –   —    −   Œ    œ   †    ‡   fi    fl
  286.     T:  '    '   <    >   "    "   "    -   --    -   OE    oe  |    ¦   fi    fl
  287.  
  288. 2×LF after attribution
  289.     When the file is loaded into Zap, this ensures that there's an empty
  290.     line between the attribution and the following (usually quoted) text.
  291.     Note that it doesn't check for blank lines, just empty ones.
  292.     This flag is not alterable via the mode menu for a file, since it has
  293.     no effect during editing.
  294.  
  295. Remove \n in QP =\n
  296.     This affects how qp decoding is performed. When off, only the '=' at
  297.     the end of a line is removed; the LF is left intact. When on, both
  298.     are removed, thus joining the two lines.
  299.  
  300. Remove quoting after QP =\n
  301.     This affects how qp decoding is performed. When off, quoting is left
  302.     intact; this may cause quoting characters to appear partway through a
  303.     line of text. When on, the quoting is removed if the quoting level on
  304.     the first line is equal to or exceeds the quoting level on the second
  305.     line, eg. for ">>" and ">", the ">" will be removed and the lines
  306.     joined; if the above condition is not met, the lines are left
  307.     separate with just the '=' removed.
  308.     (Not relevant if \n removal is disabled.)
  309.  
  310. Emphasis in foreground
  311.     Leads to a submenu containing the four emphasis types. For each
  312.     emphasis type, if its entry is ticked, it is coloured by altering the
  313.     foreground rather than the background. While this may look better to
  314.     some, it does mean that marking URLs with emphasis characters isn't
  315.     quite so effective; however, emphasised text is marked even when the
  316.     long line warning is active.
  317.  
  318. Emphasis enabling
  319.     Similar to the above's submenu, except that this controls whether
  320.     each emphasis type is enabled.
  321.  
  322. Header present
  323.     This is a status display, showing whether a valid header was found
  324.     when Email mode was selected. If one wasn't, then 'Ignore header' is
  325.     unavailable, and ZapEmail assumes that you're editing mail.
  326.     It is not present in the mode menu when opened via the iconbar menu.
  327.  
  328. (These flags may also be set via the Email_FlagsToggle command.)
  329.  
  330.  
  331. Formatting
  332. ––––––––––
  333.  
  334. As mentioned above, just hit Ctrl-F6 or whatever key you have FORMATTEXT
  335. on...
  336.  
  337. A paragraph is defined as a block of text terminated in one of the following
  338. ways:
  339.  - end of file
  340.  - a blank line
  341.  - white space at the start of a line (following quoting)
  342.  - a line containing a different level of quoting
  343.  
  344. Leading blank lines are ignored; the paragraph is assumed to start on the
  345. first non-blank line.
  346.  
  347. The quoting level is preserved up to 16 levels. Attempts to format more
  348. deeply quoted text will cause truncation of the quoting, and attempts to
  349. change the quoting style will be ignored; you will be warned in both cases.
  350.  
  351. If the first line being formatted contains excess indent (ie. can't fit
  352. quoting, indent and first word) then it will be split just before that first
  353. word. If a word is too long to fit on a line, the split will occur after that
  354. word.
  355.  
  356. Both linewrap and wordwrap know about quoting. However, where FORMATTEXT
  357. 'standardises' the quoting, linewrap and wordwrap just replicate the quoting
  358. on the current line.
  359.  
  360.  
  361. Quoting
  362. –––––––
  363.  
  364. Only the standard quoting character ">" is recognised by default. As
  365. mentioned above, you can enable recognition of other characters, the default
  366. being
  367.     : " |
  368.  
  369. You can have up to eight non-standard characters; no duplicates, control
  370. characters, spaces, digits, letters, or top-bit-set characters are allowed.
  371. Obviously, you can't define '>' as non-standard!
  372.  
  373. It's recommended that the most common ones appear first in the list.
  374.  
  375. ZapEmail cannot easily recognise when these characters are used as quoting
  376. and when they are quoted - beware of things like
  377.  
  378. > : "Standard" quoting usage is encouraged.
  379.  
  380. which it'll get wrong, if ':' and '"' are defined as quoting characters and
  381. either non-standard quoting is active or you're using Email_ChangeQuoting.
  382.  
  383. SPLITLINE will preserve the quoting level; JOINLINE will only do so if the
  384. quoting levels are the same, or one of the lines is blank (unnecessary
  385. quoting will be deleted). This is intended to aid in the insertion of
  386. (unquoted) comments in the middle of a block of quoted text, and in avoiding
  387. misquoted text.
  388.  
  389. DELTOSTART will preserve the quoting level unless the line is otherwise
  390. blank.
  391.  
  392. I recommend the use of EMAIL_SPLITFORINSERT :-)
  393.  
  394. INDENT and OUTDENT work and take notice of the quoting, inserting or removing
  395. following it. However, due to a hack required to stop DELTOSTART from
  396. deleting quoting, if the cursor is within the quoting on the first complete
  397. line in the selection, then they will ignore (some of) the quoting on that
  398. line.
  399.  
  400. DELETENEXT will, if wordwrap is enabled and line editing is disabled, delete
  401. quoting in one go (unless the quoting levels are different). This is because
  402. it would otherwise be possible (with lines approaching the wrap width) to
  403. delete the LF at the end of a line, causing the line to be wrapped and the
  404. quoting to be regenerated in the same position...
  405.  
  406.  
  407. Colouring
  408. –––––––––
  409.  
  410. Name        Description                Default
  411. ¨¨¨¨        ¨¨¨¨¨¨¨¨¨¨¨                ¨¨¨¨¨¨¨
  412. Header        The header colour            Grey 3
  413. Signature    The .sig and .sig separator colour    Green
  414. > quote        1st level quoting            Blue       (cream)
  415. >> quote    2nd level quoting            Red       (orange)
  416. >>> quote    3rd level quoting            Dark green
  417. >>>> quote    4th level quoting            Cyan
  418. Long line    Text beyond the <width>th column    Orange bg  (blue)
  419. URL        Uniform resource locator        Grey 4       (yellow)
  420. Address        Email address                Grey 5       (grey 2)
  421. _text_        "Underlined" word            Cream bg   (grey 6)
  422. *text*        "Emboldened" word            Yellow bg  (grey 5)
  423. /text/        "Italicised" word            Cream bg   (grey 6)
  424. -text-        "Strikehrough" word            Cream bg   (grey 6)
  425. Header ID    Header line identifiers            Dark green (green)
  426. Broken ID    Header lines with broken identifiers    Red
  427. From:        "From: " and "From " header line IDs    Blue       (grey 1)
  428. To:, Cc:, Bcc:    Recipient line IDs            Blue       (grey 1)
  429. Newsgroups:    Newsgroups line ID            Blue       (grey 1)
  430. Subject:    Subject line ID                Green       (dk green)
  431. Content-*    Content-Type, etc.            Grey 2       (grey 5)
  432. Organization:    Organisation line ID            Cyan
  433. X-*        Header IDs beginning "X-"        Orange
  434.  
  435. Quoted text colouring wraps round every 4 levels. 'bg' = background.
  436.  
  437. The default colours are set up for dark text on a light background (I use
  438. black on white); the bracketed colours are the alternative defaults for light
  439. on dark, where different (tested with white on black).
  440.  
  441. The header ID colour acts as a catch-all for those not specially coloured.
  442. Broken IDs are those not containing alphanumerics or hyphens, or not
  443. terminated with ": ". "From " is only coloured as non-broken if it's on the
  444. first line of the message (although it's really only of use when viewing raw
  445. SMTP).
  446.  
  447. The long line warning applies to the body text and the signature; for what
  448. should be obvious reasons, it isn't applied to the header. <width> is either
  449. the display width or the format width, whichever is narrower. The 'format to
  450. display width' settings are taken into account.
  451.  
  452. ZapEmail recognises URLs of the form "<{protocol}{address}>" or
  453. "<URL:{protocol}{address}>". Recognised protocols are:
  454.     finger://    http://        news:        telnet://
  455.     ftp://        https://    nntp:        tn3270://
  456.     gopher://    mailto:        rlogin://
  457. Site names beginning with "ftp.", "www." or "news." are also recognised.
  458. Minimal checking is performed on the {address}; however, email addresses
  459. should contain one '@' else they'll not be coloured. mailto: is coloured
  460. differently, and may be omitted if "URL:" is also. The "URL:" prefix is case
  461. sensitive. (Note: some invalid URLs will be coloured. This will be corrected
  462. so far as is practical in a future release.)
  463.  
  464. Emphasis colouring is designed to allow, as well as space, tab and line feed,
  465.     any of (["' prior to the initial * _ / -
  466.     any of )]"'.,:;!? after the trailing * _ / -
  467.     any of the above within the emphasised text
  468. but to disallow
  469.     any of )]"'.,:;!? after the initial emphasis character
  470.     sequences of more than one emphasis character
  471.     text not containing alphanumerics or top-bit-set characters
  472. Examples:
  473.     Coloured            Not coloured
  474.     (*this* is)            _but not this_
  475.     /Wibble/.            *Disaster_!
  476.     *Yes!*                *!No*
  477.     *This*is*too*            *?*
  478. The long line warning, or URL and address colouring if the foreground option
  479. is selected, overrides this.
  480.  
  481. On loading, ZapEmail tries to hack WRAPWIDTH so that a redraw is forced if in
  482. Email mode.
  483.  
  484.  
  485. MIME quoted printable
  486. –––––––––––––––––––––
  487.  
  488. ZapEmail has the ability to encode and decode quoted printable ("qp").
  489.  
  490. When a file is loaded into ZapEmail mode (and it has a header which isn't
  491. being ignored), ZapEmail will search for the content encoding type header and
  492. if this specifies qp, decoding will be performed automatically.
  493.  
  494. Similarly, when you save the file, it will be automatically qp encoded; you
  495. don't get to see the consequences of this encoding, since ZapEmail then
  496. decodes it immediately after Zap has saved the file. (This is similar to
  497. BASIC mode's mangling of the line numbers and line lengths, and BASTXT mode's
  498. tokenisation and detokenisation.)
  499.  
  500. The qp 'long line' break is done at the current wrap width, and the message
  501. header is left intact. If any of this behaviour is incorrect according to the
  502. qp specification, let me know.
  503.  
  504. The two flags 'Remove \n in QP =\n' and 'Remove quoting after QP =\n' affect
  505. qp decoding; these are described in the 'Email mode menu' section above.
  506.  
  507. *** WARNING: if MIME headers are present and header ignore is enabled, the
  508. text will *not* be encoded or decoded.
  509.  
  510.  
  511. Passing URLs to web browsers
  512. ––––––––––––––––––––––––––––
  513.  
  514. You can send a URL by CTRL- or ALT-double-clicking on it.
  515.  
  516. This is equivalent to using SendURL (in ZapDS), except that it is not learnt.
  517.  
  518.  
  519. Zap's 'non-standard' option
  520. –––––––––––––––––––––––––––
  521.  
  522. Setting this flag has the following effects:
  523.  
  524. SPLITLINE will not insert quoting if the cursor was at the start or end of
  525. the line (quoting characters are part of the start of the line). Spaces and
  526. tabs will be removed.
  527.  
  528. JOINLINE will insert a space at the join.
  529.  
  530. DELTOSTART will delete the quoting if the cursor is at the end of the line.
  531.  
  532.  
  533. Marking selections
  534. ––––––––––––––––––
  535.  
  536. These restrictions apply when altering the selection directly via either a
  537. mouse drag or the cursor keys. They do not apply to single Adjust clicks or
  538. equivalent commands.
  539.  
  540. * The header separator
  541.     The selection is limited to either the header or the message body. The
  542.     separator can never be part of the selection.
  543.  
  544. * The .sig separator
  545.     If you attempt to select this, it and the entire .sig will be selected.
  546.     As soon as you move the cursor/pointer over either the body text or the
  547.     .sig, the separator becomes deselected; moving back over the separator
  548.     causes it and the .sig to be reselected.
  549.  
  550. It also ensures that quoting is selected or deselected appropriately; quoting
  551. can never be partially selected, and if the quoting levels at each end of the
  552. selection don't match (empty lines at the end of the selection excepted),
  553. it's restricted to logical lines.
  554.  
  555. Where the selection would otherwise start and end immediately after quoting
  556. characters, and the quoting is of the same depth, then the selection is
  557. temporarily restricted to logical lines.
  558.  
  559. The logical lines restriction causes the inclusion the first line in the
  560. selected area, and the exclusion of the last line, if incompletely selected
  561. (the terminating line feed is, as usual, considered to be part of the line).
  562.  
  563. Since ZapEmail post-processes text mode's selection code, all the normal
  564. selection operations are available.
  565.  
  566.  
  567. Notes
  568. –––––
  569.  
  570. This mode contains some hard-wiring of the RETURN and TAB character codes.
  571. Trying to alter them will have no effect.
  572.  
  573. When you select, or load a file into, Email mode, ZapEmail tries to determine
  574. whether it has a header by examining the first line of text. This is done
  575. independently of the 'Ignore header' option. The cursor will, if in the
  576. (non-ignored) header, be moved past it; the window will *not* be scrolled to display it.
  577.  
  578. Commands which work on the header will do nothing if 'Ignore header' is
  579. enabled.
  580.  
  581. The missing .sig separator warning is disabled when 'Ignore .sig separator'
  582. is ticked or 'Strip spaces' is selected.
  583.  
  584.  
  585. The commands
  586. ————————————
  587.  
  588. Those marked ☓ will only work in Email mode.
  589.  
  590. Note that minibuffer prompting will only occur if the command is issued *on
  591. its own*, ie. not as part of a colon-separated list of commands such as might
  592. be supplied to COMMAND or bound to a key.
  593.  
  594.  
  595. Email_FixSig ☓
  596. ––––––––––––
  597.  
  598. Fixes the .sig separator. To do so, it searches backwards from the end of the
  599. file, and stops as soon as it encounters either a valid or broken (missing
  600. space) separator - in the latter case, it will be repaired.
  601.  
  602. This command does nothing if the 'Ignore .sig separator' option is enabled.
  603.  
  604.  
  605. Email_StripSpcs ☓
  606. –––––––––––––––
  607.  
  608. This is the Email mode equivalent of STRIPSPACES. It performs space and
  609. quoting altering according to bits in the supplied word:
  610.     Bit    Action
  611.     0    Strip spaces at ends of lines
  612.     1    Strip tabs at ends of lines
  613.     2    Tabify
  614.     3    Strip quoting from otherwise blank lines
  615.     4    Convert quoting to standard form
  616.     5-31    Reserved
  617.  
  618. The quoting conversion is identical to that done by FORMATTEXT. The header
  619. and .sig separator are always left unmodified (except possibly by the tabify
  620. function, since this is done via STRIPSPACES).
  621.  
  622. Example:
  623.     Email_StripSpcs &1B    does all of the above
  624.  
  625.  
  626. Email_Stamp ☓
  627. –––––––––––
  628.  
  629. Regenerates the Date: line using the current date and time, and the
  630. Message-ID: line using the format <date%user@domain>. For example:
  631.  
  632. From: Darren Salt <arcsalt@spuddy.mew.co.uk>
  633. Date: Mon, 28 Jul 1997 21:03:51 +0100
  634. Message-ID: <47B0EB8552%arcsalt@spuddy.mew.co.uk>
  635.  
  636.  
  637. Email_Date ☓
  638. ––––––––––
  639.  
  640. Regenerates the Date: line using the current date and time, similarly to
  641. Email_Stamp.
  642.  
  643.  
  644. Email_ChangeQuoting ☓
  645. –––––––––––––––––––
  646.  
  647. Changes the quoting character for the current paragraph, starting at the
  648. beginning of the current line. You may use any of the currently-defined
  649. quoting characters; attempts to change to something else will result in it
  650. using the default '>'.
  651.  
  652. Extra indent is preserved; the 'Spaces in quoting' flag is accounted for. No
  653. reformatting is done.
  654.  
  655. Examples:
  656.     Email_ChangeQuoting ":"        use : as quoting character
  657.     Email_ChangeQuoting        prompts you
  658.  
  659.  
  660. Email_SendURL  *** WILL BE REMOVED VERY SOON - use ZapDS's SendURL instead
  661. –––––––––––––
  662.  
  663. This command will look for something URL-like at the cursor position, and
  664. will try to send it to any currently-loaded web browser.
  665.  
  666.  
  667. Email_SplitForInsert ☓
  668. ––––––––––––––––––––
  669.  
  670. Splits the text, ensuring that there are n empty lines, and places the cursor
  671. on the second one. (At start of file, the first line is omitted; at end of
  672. file, the third onwards are omitted.)
  673.  
  674. If wordwrap is enabled, then the text following the split is reformatted.
  675.  
  676. n is a byte parameter, and defaults to 3.
  677.  
  678.  
  679. Email_IncQuoting ☓
  680. ––––––––––––––––
  681.  
  682. Increases the quoting level of the selected text, using the supplied quoting
  683. character (as for Email_ChangeQuoting). It takes notice of the 'Spaces in
  684. quoting' flag for already-quoted text, and, in non-standard mode, won't quote
  685. empty lines.
  686.  
  687. Indentation is preserved. No reformatting is done.
  688.  
  689.  
  690. Email_DecQuoting ☓
  691. ––––––––––––––––
  692.  
  693. Decreases the quoting level of the selected text. If a line is unquoted, it
  694. remains unchanged.
  695.  
  696. Indentation is preserved as far as possible. No reformatting is done.
  697.  
  698.  
  699. Email_RotEncode
  700. –––––––––––––––
  701.  
  702. Performs Rot13 encoding on the current selection; if there is none, or it's
  703. in a different buffer, it calls Email_RotEncodeCur instead.
  704.  
  705.  
  706. Email_RotEncodeCur
  707. ––––––––––––––––––
  708.  
  709. Performs Rot13 encoding on the character at the cursor. The cursor is then
  710. moved right by one character.
  711.  
  712.  
  713. Email_FlagsToggle
  714. –––––––––––––––––
  715.  
  716. This command alters the email mode flags for either the current window or the
  717. default options. The command takes a word parameter which is treated in the
  718. same way as for WFLAGS_TOGGLE.
  719.     Bit    Description
  720.     &00-08    Reserved
  721.     &09    Use foreground for emphasis
  722.     &0A    Buttons (toggles pane on/off)
  723.     &0B    Buttons -> Top
  724.     &0C    Buttons -> Left
  725.     &0D    Buttons -> Fleeting
  726.     &0E    Don't reformat .sig (if not ignoring .sig separator)
  727.     &0F    Remove \n in QP =\n
  728.     &10    Remove quoting after QP =\n (not used if no \n removal)
  729.     &11    Ignore .sig separator
  730.     &12    2×LF after attribution
  731.     &13    Don't ignore header
  732.     &14    No spaces in quoting
  733.     &15    Format to display width
  734.     &16    Allow non-'>' quoting
  735.     &17    Mangle ctrl characters
  736.     &18-1F    Format width modifier (for 'Format to display width')
  737.  
  738. For example:
  739.     Email_FlagsToggle &17        toggle 'Mangle ctrl characters'
  740.     Email_FlagsToggle &9637        enable it & toggle 'non-> quoting'
  741.  
  742. (See the ZapButtons documentation for details of the buttons flags.)
  743.  
  744.  
  745. Email_SetFormatMod
  746. ––––––––––––––––––
  747.  
  748. This command sets the format width modifier, for either the current window or
  749. the default options, to the supplied (quoted) byte parameter. It does *not*
  750. enable the 'Format to display width' flag.
  751.  
  752. For example:
  753.     Email_SetFormatMod "20"
  754.  
  755.  
  756. Email_SetQuoting
  757. ––––––––––––––––
  758.  
  759. Sets the non-standard quoting characters to the supplied string. If no string
  760. is supplied, you are prompted for one; the current list is automatically
  761. inserted into the minibuffer.
  762.  
  763. You are allowed up to eight unique, valid characters; anything else is
  764. ignored. (See the subsection 'Quoting' above for more details.)
  765.  
  766. If an empty string is supplied, the default list :"| is used; this can be
  767. suppressed by using a string containing only invalid characters. (This allows
  768. you to have non-standard quoting enabled while having no non-standard quoting
  769. defined.)
  770.  
  771. The window will be redrawn if in Email mode and non-standard quoting is
  772. enabled (this flag is *not* enabled by this command).
  773.  
  774.  
  775. Email_AddQuotingChr
  776. –––––––––––––––––––
  777.  
  778. Adds a character (supplied as a string parameter) to the non-standard quoting
  779. characters list. If no string is supplied, you are prompted for a character.
  780.  
  781. The character is only added if it is valid for use as a quoting character, it
  782. is not already in the list, and there are less than eight characters already
  783. defined.
  784.  
  785. The window will be redrawn if in Email mode and non-standard quoting is
  786. enabled.
  787.  
  788.  
  789. Email_RemQuotingChr
  790. –––––––––––––––––––
  791.  
  792. Removes a character (supplied as a string parameter) from the non-standard
  793. quoting characters list. If no string is supplied, you are prompted for a
  794. character.
  795.  
  796. The character is only removed if it is actually in the list; no warnings are
  797. given for characters not in the list.
  798.  
  799. The window will be redrawn if in Email mode and non-standard quoting is
  800. enabled.
  801.  
  802.  
  803. Email_AddTagLine ☓
  804. ––––––––––––––––
  805.  
  806. Inserts a random tagline from the file "<Zap$3rdParty>.Salt.Taglines", first
  807. ensuring that the message is LF-terminated.
  808.  
  809. The taglines file will not be loaded until this command is used, and will be
  810. reloaded if this command notices that it's been modified. If it's missing,
  811. you'll be warned instead.
  812.  
  813. The file format is as follows:
  814.  
  815. <tagline 1>
  816. <tagline 2>
  817. <tagline 3>
  818. <this one's long>
  819.  
  820. Those who would abuse this feature by using longer taglines than is generally
  821. accepted do so at their own mailboxes' risk...
  822.  
  823.  
  824. Email_AddSignature ☓
  825. ––––––––––––––––––
  826.  
  827. Inserts a random signature from a file in "<Zap$3rdParty>.Salt.Signatures",
  828. ensuring that there is a valid .sig separator (broken ones will *not* be
  829. repaired). If a .sig is already present, it is replaced. If the message is
  830. empty and contains no .sig, empty lines may be inserted to ensure sufficient
  831. separation between the header (or start of file) and the .sig.
  832.  
  833. The signature file is chosen from the directory by finding the user name from
  834. the "From:" line of the message being edited. If no valid name exists, then
  835. the name "~default" (which may be a file or directory) is used. If there's no
  836. suitable file, you'll be warned instead.
  837.  
  838. If a directory is found, then ZapEmail will check whether the message is
  839. really a news article (only possible if header editing is enabled in your
  840. newsreader), and look inside for a file called "News" or "Mail" as
  841. appropriate. If the one it wants isn't there, it looks for the other; if that
  842. isn't there either, it uses the default file.
  843.  
  844. (A few example signature files are supplied with ZapEmail.)
  845.  
  846. The signature file will not be loaded until this command is used, and will be
  847. reloaded if this command notices it's been modified. It will be discarded if
  848. a different file is needed.
  849.  
  850. The file format is the same as for the taglines file.
  851.  
  852. Those who would abuse this feature by using longer .sigs than is generally
  853. accepted do so at their own mailboxes' risk...
  854.  
  855.  
  856. Email_EditTaglines, Email_EditSigFiles
  857. ––––––––––––––––––  ––––––––––––––––––
  858.  
  859. These speak for themselves, don't they?
  860.  
  861. Anyway, for the record, they respectively:
  862. - load the taglines file for editing, first creating it if there isn't one;
  863. - open the signatures directory so that you can load a file for editing,
  864.   again creating the directory if required.
  865.  
  866.  
  867. Email_Snip ☓
  868. ––––––––––
  869.  
  870. Snips the selected text, preserving the quoting of the last line in the
  871. selected area (if it isn't fully snipped), and inserts the supplied string -
  872. you'll be prompted if one isn't supplied. If the string is null, then
  873. "[snip]" is used.
  874.  
  875. No empty lines are inserted; any line feed found immediately before, at the
  876. end of, or after the selected area is taken notice of.
  877.  
  878. You can specify the tab character using '\t' or '\T', and linefeed by '\n' or
  879. '\N'; to specify \, use '\\'. If \ is followed by any other character, then
  880. that character is treated normally.
  881.  
  882. If you actually want to snip using a null string, just use '\' on its own.
  883.  
  884.  
  885. Email_DecodeQP ☓
  886. ––––––––––––––
  887.  
  888. Decodes MIME quoted printable (unless 7bit or 8bit encoding is specified),
  889. and optionally discards the relevant MIME headers if present: this is
  890. controlled by a numeric parameter, which (if non-zero) will cause the headers
  891. to be preserved.
  892.  
  893. This is particularly useful for newsreaders which don't support MIME; it does
  894. not require the MIME headers (or any headers at all, for that matter) to be
  895. present in order to work.
  896.  
  897. Quoting is left intact where it immediately follows =\n.
  898.  
  899. (A future version may cope with situations where the quoting depth on the
  900. next line is less than on the current line: either one less, or zero.)
  901.  
  902.  
  903. Email_EncodeQP ☓
  904. ––––––––––––––
  905.  
  906. Inserts suitable MIME header lines to tell ZapEmail to perform quoted
  907. printable encoding prior to saving the file.
  908.  
  909. Like Email_DecodeQP, this command is only useful if your newsreader does not
  910. support MIME. However, it requires that headers be supplied and that ZapEmail
  911. isn't ignoring them in order to actually do anything, since ZapEmail looks
  912. for the Content-Transfer-Encoding: header line when loading and saving.
  913.  
  914.  
  915. Email_Encode8bit ☓
  916. ––––––––––––––––
  917.  
  918. Inserts suitable MIME header lines to say that the message/article is
  919. unencoded 8-bit. It is otherwise identical to Email_EncodeQP.
  920.  
  921.  
  922. Email_ReturnReceiptTo ☓
  923. –––––––––––––––––––––
  924.  
  925. Inserts a Return-Receipt-To: line in the message header. The address used is
  926. that found in the From: line.
  927.  
  928. If the message has no To: or Cc: line, then this line will not be inserted.
  929.  
  930. *** It should be noted that Return-Receipt-To: is non-standard, is not
  931.     guaranteed to work, and is generally discouraged. It's included here
  932.     because Newsbase recognises it...
  933.  
  934.  
  935. Email_AntiSpam ☓
  936. ––––––––––––––
  937.  
  938. With AST - Anti-Spam Technology. :-)
  939.  
  940. This command munges your email address in the From: line. This only works for
  941. news (and therefore not with mail-to-news gateways, or moderated groups if
  942. emailing to the moderator), and provides a measure of spam protection.
  943.  
  944. Given a string parameter of the form "<x> <y>", this will substitute all
  945. occurrences of string <x> with string <y> (having first done the reverse).
  946. You must, however, ensure that neither string is a substring of the other:
  947. using "sp spam" will not work.
  948.  
  949. It is recommended that you place this command in your Keys file, after
  950. "+Email" but before "Email_Stamp" (if you use that command). The default
  951. ZapEmail button scripts file (Scripts) contains two antispam buttons, one per
  952. button pane; you are advised to alter these instead if you do not wish to
  953. alter the keys file. Alternative spam repellents may be added to ZapEmail's
  954. menus file if you so wish.
  955.  
  956.  
  957. Email_AddHeaderLine ☓
  958. –––––––––––––––––––
  959.  
  960. Adds or replaces a line in the message header. The parameter is of the form:
  961.     Header: text
  962.     @MailHeader: text
  963.     .NewsHeader: text
  964. The '@' prefix tells ZapEmail to check for the To: header line, and the '.'
  965. prefix tells it to check for the Newsgroups: line; in both cases, if the
  966. header line is not found, then nothing is done. Using no prefix ensures that
  967. neither is checked for.
  968.  
  969. The following escapes are recognised:
  970.  
  971.     Escape    Description        Example
  972.     \f    the From: line        A. Person (me@some.where)
  973.     \u    the email address    me@some.where
  974.     \i    the user name        me
  975.     \m    the mailname        some.where
  976.  
  977. Example:
  978.     Email_AddHeaderLine ".X-no-archive: yes"
  979. which will insert the header line "X-no-archive: yes" if you are editing a
  980. news article.
  981.  
  982. The same usage recommendations apply as for Email_AntiSpam. See also
  983. ZapEmail's Types file for a working example.
  984.  
  985. (Note that this command does not know about headers which are split over more
  986. than one line.)
  987.  
  988.  
  989. Email_Buttons
  990. –––––––––––––
  991.  
  992. Selects a different buttons pane (if used in a buttons pane) and configures
  993. it as the current pane. Any views created subsequently will use this pane.
  994. For example, if you want the pane named "buttons1" in the template file,
  995. you'd use "Email_Buttons 1".
  996.  
  997. To make the current pane the default, use 255 as the parameter. Don't forget
  998. to save the options afterwards :-)
  999.  
  1000. The supplied sets of buttons work as follows:
  1001.  
  1002. Name        Select click            Adjust click
  1003. ----        ------------            ------------
  1004. Encode=QP    Email_EncodeQP            Email_Encode8bit
  1005. Decode=QP    Email_DecodeQP 0        Email_DecodeQP 1
  1006.          (affecting header)         (leaving header intact)
  1007. Stamp        Email_Stamp            Email_Date
  1008. Rot13        Email_RotEncode            (same)
  1009. > \n ×        Email_StripSpcs &B        Email_StripSpcs &1B
  1010.          (spaces, tabs, unused         (spaces, tabs, unused
  1011.           quoting)              quoting, convert quoting
  1012.                             to standard form)
  1013. -- SPC        Email_FixSig            (same)
  1014. > std        Email_ChangeQuoting ">"        Email_ChangeQuoting
  1015.          (convert to standard form)     (convert to user-defined)
  1016. +> chr        Email_AddQuotingChr        (same)
  1017. -> chr        Email_RemQuotingChr        (same)
  1018. [snip]        Email_Snip ""            Email_Snip
  1019.          (standard "[snip]")         (enter your own)
  1020. +> inc        Email_IncQuoting ">"        Email_IncQuoting
  1021.          (increment quoting level,     (increment quoting level,
  1022.           using standard form)          using user-defined form)
  1023. -> dec        Email_DecQuoting        (same)
  1024. >A split >B    Email_SplitForInsert 3        (same)
  1025. Add .sig    Email_AddSignature        (same)
  1026. Add tag        Email_AddTagline        (same)
  1027. Edit .sig    Email_EditSigFiles        (same)
  1028.          (opens <ZapEmail$Dir>.Signatures)
  1029. Edit tag    Email_EditTaglines        (same)
  1030.          (loads the taglines file)
  1031. RCPT        Email_ReturnReceiptTo        (same)
  1032. Spam X        Email_AntiSpam ".co. .com"    (same)
  1033.          (replace first string with second in From: header)
  1034. Spell check    ImpressionSpell_Buf        Spell
  1035.          (spellcheck message)         (open ZapSpell's window)
  1036. *B        JRF_Bracket " * *"        JRF_BracketSel " * *"
  1037.          (embolden word)         (embolden selection)
  1038. /I        JRF_Bracket " / /"        JRF_BracketSel " / /"
  1039.          (italicise word)         (italicise selection)
  1040. _U        JRF_Bracket " _ _"        JRF_BracketSel " _ _"
  1041.          (underline word)         (underline selection)
  1042. -S        JRF_Bracket " - -"        JRF_BracketSel " - -"
  1043.          (strikethrough word)         (strikethrough selection)
  1044. Save        QuickSave            (same)
  1045. Save & Close    QuickSave:CloseFile        (same)
  1046.  
  1047.  
  1048. ZapButtons support
  1049. ——————————————————
  1050.  
  1051. This requires the files 'Templates', 'Sprites', 'Sprites22' and 'Scripts' to
  1052. be present. If a file 'Menus' is present, then this is used to generate the
  1053. menu displayed when you click Menu over the buttons pane; otherwise,
  1054. ZapEmail's built-in mode menu is used. (A suitable default menus file is
  1055. supplied, with two entries: the first leading to the mode menu, the second to
  1056. the colours menu.)
  1057.  
  1058. Changes to these files will NOT take effect until after Zap is quit and
  1059. rerun.
  1060.  
  1061. You may alter these if you wish; you may distribute modified files as long as
  1062. the standard files are also distributed unchanged.
  1063.  
  1064. Clicking Shift-Adjust on the toggle pane icon sets the default pane.
  1065.  
  1066.  
  1067. ZapSpell support
  1068. ————————————————
  1069.  
  1070. This requires ZapSpell 0.09 or later, available from
  1071. <URL:http://www.mandala.co.uk/zspell.htm>. You will also need the
  1072. ImpressionSpell module, available either in your copy of Impression (if you
  1073. have one), or from Computer Concepts.
  1074.  
  1075. Basically, it prevents checking of the header, .sig, and any quoted text.
  1076.  
  1077.  
  1078. Credits
  1079. ———————
  1080.  
  1081. The Beta Testers (those who reported bugs and suggested ideas, or at least
  1082. said "Great, like it"):
  1083.  
  1084. Miles Sabin
  1085.     For the original, and suggesting that I "Ignore headers";
  1086.     for mentioning the dreaded word "wordwrap" ;-)
  1087. Sergio Monesi
  1088.     For finding the 77-column limit I'd imposed annoying
  1089. Ian Hinder
  1090.     For giving my old FormatText code some hammer
  1091. Joseph Heenan
  1092.     For continually complaining about config save failure
  1093. Tony Houghton
  1094.     For suggesting URL sending, and following it up;
  1095.     for mentioning a few other things - indent, wordwrap...;
  1096.     no splitting on hyphens yet, though
  1097. Andy Fawcett
  1098.     Encouragement;
  1099.     for suggesting * and _ emphasis colouring
  1100. David Croft
  1101.     Encouragement :-)
  1102. Glyn Royds
  1103.     For hacking in non-standard quoting characters into his copy
  1104. Richard Hallas
  1105.     For wanting non-standard quoting;
  1106.     for wanting / emphasis colouring, and a foreground option
  1107. Jon Ribbens
  1108.     For pointing out the fallacy of Shift-double click and URL sending
  1109. And last, but not least...
  1110. Chris Manning
  1111.     For suggesting ensuring the file is LF terminated, then complaining
  1112.       about the cursor moving if at EOF (a Zap 'feature');
  1113.     for breaking it (lots of times) and reporting back quickly;
  1114.     for complaining about errors in the documentation
  1115.  
  1116. The Users (those who suggested improvements which made it to implementation):
  1117.  
  1118. Tony Finch
  1119.     For being sensible (once I'd lightly singed him);
  1120.     for suggesting a definable width warning, and no width restriction
  1121. Richard Sterry
  1122.     For forwarding the ANT suite OLE info from Donald McFarlane
  1123. Martin Tillman
  1124.     For wanting a empty line after attribution - I'm told that Marcel
  1125.       doesn't put one in :-D
  1126. Samuel Penn
  1127.     For wanting more flexible non-standard quoting (given some of the
  1128.       quoting I've seen...)
  1129. Nick Craig-Wood
  1130.     For wanting an improved (ie. better than TTFN/Messenger) tagline
  1131.       and signature facility
  1132. James Aylett
  1133.     Yes, he said, addresses should be in a different colour from URLs,
  1134.       and mailto: URLs should be treated as addresses
  1135. Ian Richardson
  1136.     A little bug-hunting, a pointer to some URL info, and not wanting to
  1137.       format .sigs
  1138. Tim Tyler
  1139.     For ZapButtons, despite his NewMail mode ;-) ;
  1140.     for general bug hunting
  1141. Robin Moffatt
  1142.     For wanting receipts returned to, and an anti-spam feature
  1143.  
  1144. I'm not listing the users who said "Great, like it" because I suspect the
  1145. list would become longer than the rest of the help text ;-)
  1146.  
  1147. I don't remember who mentioned coloured URLs; I suspect Tony Houghton.
  1148.  
  1149. Coding Help:
  1150.  
  1151. Matthew Hambley
  1152.     Things would have taken 'slightly' longer without his ZapHTML redraw
  1153.       code
  1154. Dominic Symes
  1155.     Without the text mode source, I probably wouldn't have done linewrap
  1156.       and wordwrap;
  1157.     I hardly need mention Zap ;-)
  1158.  
  1159.  
  1160. Copyright
  1161. —————————
  1162.  
  1163. The conditions of copying this program and its associated documentation are
  1164. the same as those of the main Zap application, except you do not need my
  1165. permission to copy it if you have Dominic Symes's. Development versions
  1166. (indicated by 'pre' in the module help) and those distributed in beta test
  1167. are not for distribution (though I may upload them to various ftp sites).
  1168. Otherwise, distribution is allowed as long as all files are present and
  1169. unmodified.
  1170.  
  1171. This software is provided as is with no warranty as to its suitability or
  1172. otherwise for any particular task. If it does anything nasty then I want to
  1173. know so I can fix it, but I cannot (and cannot afford to) take any
  1174. responsibility.
  1175.  
  1176. Please note that I reserve the right to make alterations to this program, its
  1177. operation, documentation, and/or conditions of use without notice in any way
  1178. I see fit. I rarely see fit to make things worse :-)
  1179.  
  1180.  
  1181. Contact
  1182. ———————
  1183.  
  1184. Darren Salt - arcsalt@spuddy.mew.co.uk
  1185.