home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / yep16.zip / yep.doc < prev    next >
Text File  |  1997-04-09  |  62KB  |  1,313 lines

  1.                    Y              E              P
  2.  
  3.                    Yarn Editor  Pre/Post Processor
  4.  
  5.                    Y              E              P
  6.  
  7.                              Version 1.6
  8.  
  9.                               Contents:
  10.                               ~~~~~~~~~
  11.        -1- ------------------------------- Introduction to Yep
  12.        -2- ------------------------------- Installation of Yep
  13.            (------------- Edit Yarn CONFIG
  14.            (----------------- Edit Yep.cfg
  15.            (--------------Yep but Not Yarn
  16.        -3- ------------------------------- Tags & Substitution
  17.            (-------------- {RNDL:filename}       (random line)
  18.            (-------------- {RNDF:filename}       (random file)
  19.            (-------------- {IMPF:filename}       (import file)
  20.            (---- {EXEC:filename arguments}   (execute program)
  21.            (------------ {IMPL:#:filename}       (import line)
  22.            (- {IMPLS:"string"::"filename"}       (line string)
  23.            (---- {IMPLR:L#:S#:C#:filename}        (line range)
  24.            (----------------- Subsitutions
  25.        -4- ------------------------------- Yep Operation Notes
  26.            (---------------- . Translation
  27.            (---------------- Mailing Lists
  28.            (------------------ SIG Example
  29.        -5- ------------------------------- Of Conditional Tags
  30.            (-------------- {IFTO:any text}
  31.            (------------ {IFSUBJ:any text}
  32.            (------------ {IFDATE:any text}
  33.            (-------------- {IFNG:any text}
  34.            (-------------- {IFXN:any text}
  35.            (-------------- {IFCC:any text}
  36.            (------------- {IFBCC:any text}
  37.            (-------------- {IFRT:any text}
  38.            (---------- {IFFLAG:true/false}
  39.            (--------- {SETFLAG:true/false}
  40.        -6- ------------------------------- Capturing Your URLs
  41.        -7- ------------------------------- UUencoding and Yep!
  42.            (---------------{UUEN:filename}
  43.        -8- ------------------------------- Of Specialized Tags
  44.            (--------------------- {EXPD:#}       (expiry date)
  45.            (---------------- {DATE:string}   (date/time/more!)
  46.            (---------------------- {POM:#}     (phase of moon)
  47.            (----------------- {YPDEC:code}       (Yep decrypt)
  48.            (------------------- {RNDN:#:#}     (random number)
  49.            (---------------- {RNDC:string}  (random character)
  50.            (---------------- {HEADER:name}     (header values)
  51.            (----------- Special Precedence
  52.        -9- ------------------------------- Block Process & PGP
  53.       -10- ------------------------------- Anonymous Remailers
  54.       -11- ------------------------------- Of Finding Problems
  55.       *12* ------------------------------- History of Revision
  56.       -13- ------------------------------- Who, what and where
  57.  
  58.  
  59.  
  60. -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-
  61. Introduction to Yep:
  62. -------------------
  63.  
  64.    Yep is an "editor shell" for use specifically with the Yarn off-line
  65.    newsreader (OS/2 version). Yep will also work with other mail/news
  66.    readers which call external text editors.
  67.  
  68.    Yep provides the following functionality:
  69.  
  70.         - Start your editor with the first line number past the message
  71.           header, or quotes in a reply, (if your editor supports it)
  72.         - Append your own lines to message headers.
  73.         - Embedded macro tags at any point can:
  74.                 - import random lines of text (suitable for taglines,
  75.                         SIG lines, random header messages, etc)
  76.                 - import files automatically into messages.
  77.                 - import random files (ie. useful for random SIGs)
  78.                 - execute programs (useful to create macros which
  79.                         automatically import the text output of
  80.                         a program)
  81.                 - conditionally do/print things based on current
  82.                         newsgroup, to, date, or subject field.
  83.                         (for example, have custom headers or SIG
  84.                         files for particular newsgroups)
  85.         - User defined substitution code table to create "macros" from
  86.           the above tags, create custom abbreviations, or correct common
  87.           spelling errors.
  88.         - Optionally strip unused header entries when starting editor
  89.         - Automatic URL capturing / logging / converting
  90.         - Lightning fast built in UUencoder for file importing
  91.         - Block Processing for filters/PGP encryption, etc
  92.         - Many, many, many more weird and wonderful things, far too
  93.           numerous to describe here. Read on!
  94.  
  95.    Yep is extremely configurable. The author likes to think of it as a
  96.    program that can make every email an adventure! (-: It can be utilized
  97.    in a simple manner for basic functions (like setting start up cursor
  98.    positions), or in mind bogglingly complex customised craziness.
  99.  
  100.    It should be mentioned that there is already an excellent, and far
  101.    more comprehensive "editor shell" for Yarn which is called "Yes". My
  102.    reason for creating my own shell was mainly because there is no OS/2
  103.    version of Yes (at this time); and also creating my own shell I can
  104.    tailor it to my specific (and possibly insane) desires. I have no idea if
  105.    anyone else may find it useful to them, but here it is.
  106.  
  107.    And after all, you could set yourself up to use both Yep and Yes at the
  108.    same time, if you really want to. (-:
  109.  
  110.  
  111. -2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-
  112. Installation of Yep:
  113. -------------------
  114.  
  115.    It doesn't matter what directory you place YEP.EXE in, just as long
  116.    as the YEP.CFG is in the same directory.
  117.  
  118.    1. Edit your Yarn CONFIG file.
  119.  
  120.         Edit the line which begins "editor=". This line should now read:
  121.  
  122.                 editor=<path>\YEP.EXE
  123.  
  124.         where <path> is the path to wherever you placed the YEP.EXE.
  125.         Note: Yep should have no parameters on that line. You will
  126.         define the command line for you editor in the YEP.CFG file.
  127.  
  128.    2. Edit your YEP.CFG file.
  129.  
  130.         There are comments in this file (all lines beginning with a
  131.         semi-colon (;) are comment lines), so not many details will be
  132.         given in this document. Refer to the Yep.Cfg for instruction.
  133.  
  134.         You may use multiple copies of YEP for different users of yarn
  135.         on your system. The YEP will always look for a CFG file that has
  136.         the same root name as itself. Therefore if you made another
  137.         copy of Yep and called it YEP2.EXE you would then create a
  138.         YEP2.CFG file, which could have it's own set up.
  139.  
  140.         In the Yep.Cfg if you specify the full path (and EXE extension)
  141.         of your editor it will be called directly and speed up loading
  142.         a bit. Otherwise it is called though the command shell and your
  143.         path is searched.
  144.  
  145.    That's all there is to basic installation. How you use and customize
  146.    Yep is up to you.
  147.  
  148.  
  149. Yep But Not Yarn
  150. ----------------
  151.    Yep will work with some other OS/2 news/mail readers which meet
  152.    the following criteria:
  153.         - uses an external text editor
  154.         - sends message headers to the editor
  155.  
  156.    Yep may have to be configured to recognise the filename of
  157.    messages used with your news reader. See the line beginning
  158.    Process= in the Yep.cfg for details. Yep is set up by default
  159.    to recognise Yarn, MR2ice (see the MR2ice.doc included).
  160.  
  161.  
  162. -3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-
  163. Tags & Substitution:
  164. -------------------
  165.  
  166.    A major concept of Yep is that of it's "macro" tags. Each message is
  167.    scanned for substitutions and tags before the editor starts, as well
  168.    as after the editor exits.  There are at this time only a few tags
  169.    implemented (but many things can be done with them).
  170.  
  171.    The basic syntax for tags are:
  172.  
  173.         {TAG:arguments}
  174.  
  175.    TAG is the name of the tag to be used, followed by a colon, followed
  176.    immediately by information that the tag is to work with. Tags are
  177.    not case sensitive-- they can be upper or lower or mixed case.
  178.  
  179.    Tags and substitutions are scanned sequentially on each line and
  180.    therefore nesting (tags within tags) will not work. However all
  181.    substitutions are done before any tags are interpreted, therefore
  182.    you can put substitution codes inside tags (i'm not sure what for).
  183.  
  184.    Yep attempts to "translate" or "filter" all text that goes though
  185.    it. It can get somewhat complex, but you can also include tags in
  186.    imported files, and they will be honoured.
  187.  
  188.  
  189.    {RNDL:filename}
  190.  
  191.         This tag will import a random line from the text file
  192.         specified. The file can be of any length. Blank lines and
  193.         lines beginning with a semi-colon (;) in the file will be
  194.         ignored.
  195.  
  196.         This tag is useful for creating random "taglines" in your sig,
  197.         or a random line in a header. It may have many other uses as
  198.         well-- but that is up to you, and your imagination.
  199.  
  200.         For example, if in your YEP.CFG you had a header line like
  201.         this:
  202.  
  203.                 X-Funny-Line: {RNDL:funny.txt}
  204.  
  205.         In the above example the "X-Funny-Line:" header would be
  206.         included in your message and a random line from a text file
  207.         called "funny.txt" would follow it.
  208.  
  209.  
  210.    {RNDF:filename}
  211.  
  212.         This tag inserts a random file. The "filename" specified will
  213.         be considered a "root" or "base" filename (ie. the filename
  214.         WITHOUT any extension). The directory containing the filename
  215.         root will be scanned looking for files with that name having
  216.         numbered extensions .1, .2, .3, and so on. The extension
  217.         numbers must be sequential, with no gaps. A random file will
  218.         be picked and inserted.
  219.  
  220.  
  221.    {IMPF:filename}
  222.  
  223.         Very simply imports the "filename" file into your message.
  224.         It could be useful for inserting external files into a SIG,
  225.         or other places. For example, some people like to include
  226.         their PGP key in their sig. You could do that by including
  227.         {ImpF:c:\pgp\mykey.asc} in your SIG file (note: Yep does not
  228.         append a SIG file itself, but interprets the SIG file that
  229.         Yarn appends to each message). In this way if you upgrade
  230.         PGP to a new version and export a new key to the filename
  231.         noted above, your sig will always automatically have the
  232.         latest extracted version of your key.
  233.  
  234.  
  235.    {EXEC:filename arguments}
  236.  
  237.         This causes your message to stop and execute a file. The
  238.         idea here is that you might have a file which output some
  239.         text you would like to insert into the message: perhaps
  240.         random quotations, or up to the second system statistics.
  241.         You can execute the file with this tag and redirect the
  242.         output to a temporary file, and then use the IMPF tag to
  243.         read in the newly created temporary file.
  244.  
  245.         See the Yep.Cfg file for a few examples of this.
  246.  
  247.         As with the text editor configuration, if you specify
  248.         a full path (with EXE extension) for your filename to
  249.         EXEC then the program will be called directly, which
  250.         speeds things up. Otherwise the file is run though the
  251.         command processor and path is searched.
  252.  
  253.         Note: if you are using the EXEC tag to capture output
  254.         using standard I/O redirection, do NOT include the EXE
  255.         on the path/filename, as the program must be executed
  256.         indirectly through your command processor in order to do
  257.         standard output redirection. (See below in the "substitutions"
  258.         section for more details).
  259.  
  260.  
  261.    {IMPL:#:filename}
  262.  
  263.         Perhaps there is a text file from which is only wanted a
  264.         single specific line of text (for example: to grab a line
  265.         of information from the output of a text file generated
  266.         by some other program}. With the ImpL tag you specify the
  267.         line number you wish to read where the # is (do not include
  268.         a # symbol), followed by a colon (:), and the filename.
  269.  
  270.         As an example: perhaps in your mail headers you would like
  271.         to display to the world how long your computer has been
  272.         running. There is a nice utility called "Go" by Carston Wimmer
  273.         (ftp://hobbes.nmsu.edu/os2/textutil/go_15.zip) which will
  274.         display OS/2's "up time" (and will do much more). However
  275.         the output of Go also includes title/copyright line of text
  276.         which you don't want to import: all you want is the "up time"
  277.         reported on line 3 of Go's report.
  278.  
  279.         The output of "go -ut" might look like this:
  280.  
  281.    GO! v1.5 - (c) 1993-95 by Carsten Wimmer <cawim@train.oche.de>
  282.  
  283.    Uptime:  1d 23h 56m 59s 364ms
  284.  
  285.         Therefore you might include in your yep.cfg a header
  286.         definition which would look like this:
  287.  
  288.                 X-OS2-{exec:go -ut >utmp}{impL:3:utmp}
  289.  
  290.         The first tag in the above example executes the "Go" utility
  291.         with the "-ut" switch and redirects the output to a work file
  292.         called "utmp". The next tag then directs Yep to import line
  293.         three, and only line three, of the work file that was created.
  294.  
  295.         Note also that the output of Go, with the -ut switch, includes
  296.         a header-like "Uptime:", so in our example the fine output of
  297.         your header would look like this:
  298.  
  299.                 X-OS2-Uptime:  1d 23h 56m 59s 364ms
  300.  
  301.  
  302.    {IMPLS:"string"::"filename"}
  303.  
  304.         Import the first line from a text file with begins with the
  305.         string specified. For example, lets use the "GO" program
  306.         again. Say you wanted to report in your message (God, only
  307.         knows why) the current number of processes and threads
  308.         active. When you EXEC "GO" it gives a list of all your
  309.         processes running, and a summary at the bottom. We can not
  310.         use IMPL (import line) because the summary is going to be
  311.         on a different line depending how many processes were in
  312.         the list above it. The summary line given by "GO" looks like
  313.         this:
  314.  
  315.                 There are 11 Processes with 66 Threads.
  316.  
  317.         Using the IMPLS tag we can search for the first string in
  318.         our temporary capture file (see EXEC procedure) beginning
  319.         with "There are". The tags would then perhaps look like this:
  320.  
  321.                 {EXEC:go >utmp}{ImpLS:"There are"::"utmp"}
  322.  
  323.  
  324.    {IMPLR:L#:S#:C#:filename}
  325.  
  326.         This variation works the same as {IMPL:#:filename}
  327.         (import line), but with the added control of being able to
  328.         only import a portion of that line. Three numbers must be
  329.         specified: L# is the line number to be imported; S# is the
  330.         starting column of the line to import; and C# is the count
  331.         number of characters to import from that starting position.
  332.         For example, say there was a program you ran with an EXEC
  333.         tag which outputs...
  334.  
  335.         After giving this much thought i have realized that I can
  336.         dream up no practical application for this tag! You are
  337.         on your own! If you ever need to import just a portion
  338.         of a certain line (for some task i can not even imagine),
  339.         here is the tag to do it with! ImpLR stands, only slightly
  340.         confusingly, for "import line range". That's that.
  341.  
  342.  
  343. Substitutions:
  344. -------------
  345.    It would be rather awkward if you had to type in then entire tag,
  346.    with filenames, and whatever other data that needs to be given,
  347.    therefore you can define your own tags by using a substitution table.
  348.  
  349.    In the Yep.Cfg you may define (currently) up to 100 substitutions.
  350.  
  351.    For example, say you wanted a quick way to import your PGP public
  352.    key into a message when someone asks for it. Rather than typing:
  353.    {impf:c:\pgp\my.key}, you could set up a substitution in the Yep.Cfg
  354.    something like this (refer to Yep.Cfg for details on the format):
  355.  
  356.         "{pk}"::"{impf:c:\pgp\my.key}"
  357.  
  358.    Now whenever you want to insert your PGP public key you would only
  359.    need to quickly type {pk} in your message and it would be inserted.
  360.    This is just an example, you could make it whatever you wanted.
  361.  
  362.    For another example, silly as it may be, say you had a fetish about
  363.    how much disk drive space you have free at any given moment, and you
  364.    are obsessed with telling everyone in every message how much drive
  365.    space is available that very second. You could define a substitution
  366.    something like so (assuming you have a utility called "free" which
  367.    reports current free disk space):
  368.  
  369.         "{ds}"::"{exec:free >tmp}{impf:tmp}"
  370.  
  371.    In this way the "free" command is executed and its output is
  372.    redirected to a temporary text file which is then imported into
  373.    your message. (Note: if you are going to use ">" redirection
  374.    to send output to a file, Yep needs to go through your OS command
  375.    interpreter shell-- in this case do not include a full path to
  376.    your program, as directly calls will not have redirected output.)
  377.  
  378.  
  379. -4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-
  380. Yep Operation Notes:
  381. -------------------
  382.  
  383.    Dot Translation:
  384.    ===============
  385.         When Yep runs you will see it announce itself, and then a
  386.         series of coloured dots. (This behaviour can be turned off in
  387.         the YEP.CFG if undesirable). Each dot tells which operation
  388.         Yep has just completed during it's scanning and filtering
  389.         activities. In this way you can tell how long certain
  390.         operations take, as well as possibly debug certain problems;
  391.         not to mention it's a form of cheep entertainment if you are
  392.         tired of watching television.
  393.  
  394.         Yep begins by announcing itself as "Yep...". This just tells you
  395.         the shell has started. After that dots follow:
  396.  
  397.         LIGHTBLUE - an user defined header line has been inserted.
  398.  
  399.         LIGHTGREEN - a substitution action has taken place.
  400.  
  401.         GREEN - A random line (RNDL) has been fetched (BLUE if it fails).
  402.  
  403.         BROWN - Yep has successfully imported a text file (IMPF/IMPR).
  404.  
  405.         YELLOW - Yep has attempted to import a text file but failed.
  406.  
  407.         GRAY - this is a potentially important dot: it indicates that
  408.                yep is about to execute (EXEC) a program. A DARK grey dot
  409.                means it is attempting to execute the program directly, a
  410.                LIGHT gray dot means it is executing through your OS shell.
  411.                This dot also shows up immediately before the Editor is
  412.                called, so the user can see how quickly Yep pre-processes
  413.                the file, and calls the editor (depending on system speed).
  414.  
  415.         PINK - YPDec has decrypted a code, or a random number generated.
  416.  
  417.         BLUE - is a general error, and an error usually is given.
  418.  
  419.         After you finish editing your message Yep scans the message for
  420.         any new processing instructions. The above colours apply. When
  421.         it is finished it signs off with "...Yep" and returns you to Yarn.
  422.  
  423.  
  424.    Mailing Lists:
  425.    =============
  426.         Rather a cheap hack, but one could, if one wanted, create a
  427.         file with a comma separated list of addresses. Then create a
  428.         substitution code which loads that file, something like:
  429.  
  430.                 "{list1}"::"{IMPF:c:\yarn\MailLst1}"
  431.  
  432.         With this set up you only need to type {list1} in the Bcc: or
  433.         Cc: field of your message and the list of addresses will be
  434.         imported/substituted, and therefore mailed to everyone.
  435.  
  436.         Alternately you can just define a substitution that has your
  437.         "mailing list" in it, and avoid having to import a file.
  438.  
  439.                 "{L2}"::"someone@somewhere.edu,another@addr.com"
  440.  
  441.         Note: addresses are separated by commas. In the above
  442.         example if you entered {l2} in the To:, Cc: or Bcc: field
  443.         of a message then it will be substituted with the comma
  444.         delimited list.
  445.  
  446.  
  447.    SIG-gy Tricks:
  448.    =============
  449.         Note: Yep does not append a SIG file, but relies on Yarn
  450.         to append the SIG file. Yep however interprets whatever
  451.         it finds in Yarn's SIG file allowing for many tricks.
  452.  
  453.         Using various substitution codes you can do quite flexible
  454.         things with your SIG file. Not only can you have complete
  455.         randomly chosen SIG files, and link external files, but
  456.         individual elements inside your SIG can be randomized via
  457.         the RNDL tag. For example, my current SIG file looks like
  458.         this (this is just one small example of the possibilities):
  459.  
  460. {rndl:c:\osu\yarn\sig1top.lst}
  461.   Tim Middleton {rndl:c:\osu\yarn\sig1luv.lst} as544@torfree.net
  462. {rndl:c:\osu\yarn\sig1red.lst}
  463. {rndl:c:\osu\yarn\sig1end.lst}
  464.  
  465.         What it does is gets a random top element from a list,
  466.         then prints my name, inserts another random element from
  467.         a different list, and then my email address. Furthermore,
  468.         it then inserts another randomly chosen line, and finally
  469.         a randomly chosen bottom element. The finally output
  470.         might look like this (call me crazy, I love randomness!):
  471.  
  472.  .+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.
  473.   Tim Middleton -with love and tomato sandwiches- as544@torfree.net
  474.   -=-= brace yourself and read The Idiot by Fyodor Dostoyevsky =-=-
  475.  ~`'~`'~`'~`'~`'~`'~`'~`'~`'~`'~`'~`'~`'~`'~`'~`'~`'~`'~`'~`'~`'~`'~
  476.  
  477.  
  478. -5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-
  479. Of Conditional Tags:
  480. -------------------
  481.  
  482.         The idea here is to give the user even more automated
  483.         customization of their messages. For example, with conditional
  484.         tags you can implement different SIGs based on the newsgroup
  485.         being posted to. Or custom header lines based on who the
  486.         message is To. This seemed like a good idea to me when I
  487.         started working on it. Now I'm not sure if it's worth the
  488.         trouble. You can safely ignore it if it doesn't sound useful
  489.         to you.
  490.  
  491.         The way these tags work is that if the condition in them is
  492.         met (ie. if it is true) then the rest of the line will be
  493.         filtered through, otherwise the rest of the line will be
  494.         discarded. If the conditional tag begins in column one and
  495.         returns false then the entire line will be skipped.
  496.  
  497.         The new tags are:
  498.  
  499.    {IFTO:any text}
  500.  
  501.         If the text specified in the "any text" is found in the To:
  502.         field of the header then the rest of the line is processed.
  503.  
  504.  
  505.    {IFSUBJ:any text}
  506.  
  507.         Same as above, only the Subject: field is checked.
  508.  
  509.  
  510.    {IFDATE:any text}
  511.  
  512.         Same as above, only the Date: field is checked. Perhaps you
  513.         want special text automatically inserted into your messages
  514.         on Fridays. I have no idea why!
  515.  
  516.  
  517.    {IFNG:any text}
  518.  
  519.         Same as above, only the Newsgroups: field is checked. This
  520.         one is possibly the most potentially useful; allowing custom
  521.         headers or footer messages to be inserted when posting in
  522.         certain newsgroups. Maybe. (For an example of how to use
  523.         specific SIGs on individual newsgroups see IFFLAG below).
  524.  
  525.  
  526.    {IFXN:any text}
  527.  
  528.         Same as IFNG except this one checks the X-Newsgroups: field.
  529.  
  530.  
  531.    {IFCC:any text}
  532.  
  533.         Same as IFTO except this one checks the Cc: field.
  534.  
  535.  
  536.    {IFBCC:any text}
  537.  
  538.         Same as IFTO except this one checks the Bcc: field.
  539.  
  540.  
  541.    {IFRT:any text}
  542.  
  543.         Same as IFTO except this one checks the Reply-To: field.
  544.  
  545.  
  546.    {IFFLAG:true/false}
  547.  
  548.         This tag needs a little more explanation. Consider the following
  549.         example Yarn SIG file (explanation to follow):
  550.  
  551.                 {IfNG:comp.os2}{ImpF:c:\yarn\os2.sig}
  552.                 {IfNG:comp.windows}{ImpF:c:\yarn\wind.sig}
  553.                 {IfNG:alt.books}{ImpF:c:\yarn\book.sig}
  554.                 {IfFlag:false}{IfTO:peri strange}{ImpF:c:\yarn\peri.sig}
  555.                 {ifFlag:false}{ImpF:c:\yarn\default.sig}
  556.  
  557.         As you have hopefully noticed, this example sig tests to see
  558.         if the user is posting in the various newsgroups: comp.os.*,
  559.         comp.windows.*, and alt.books.*; and if so then imports the
  560.         appropriate SIG file you have created.
  561.  
  562.         There is a global "FLAG" which begins always set to "false".
  563.         Whenever a conditional tag returns a "true" status the global
  564.         flag is set to "TRUE". Therefore in line four of the above SIG
  565.         example, you are first testing to see if any of the above
  566.         conditions have already been met. If they have then the rest
  567.         of line four is skipped. If a sig has not yet been imported (so
  568.         the global flag is still False) then it is checked to see if
  569.         the message is to your good friend "Peri Strange"-- who gets
  570.         his own sig to amuse him. Finally on the last line it is checked
  571.         again if no other conditions returned true this line will use the
  572.         "random file" tag to import a default SIG file with the name as
  573.         specified. (see the {IMPF:filename} tag in section 3).
  574.  
  575.         Lines beginning with an "if" tag as the first thing on the line
  576.         will not output anything (ie. will not leave a blank line) if
  577.         any conditions being tested fail before any text is printed.
  578.  
  579.  
  580.    {SETFLAG:true/false}
  581.  
  582.         There might be some circumstance, however unlikely, where you
  583.         need to set or reset the global flag. An example would be if you
  584.         have custom headers that test for certain dates or newsgroups,
  585.         and then at the bottom of the message have a SIG that does more
  586.         tests. To reset the global flag to FALSE simply put the following
  587.         tag on a line starting in column one:
  588.  
  589.                 {SetFlag:false}
  590.  
  591.         The line will be skipped in the message output, but the flag will
  592.         be set to False at that point.
  593.  
  594.  
  595. -6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-
  596. Capturing Your URLs
  597. -------------------
  598.  
  599.         This feature is disabled by default. To enable it uncomment the
  600.         UrlLog = "c:\path\filename" line in the yep.cfg, and specify the
  601.         path/filename you want to use.
  602.  
  603.         Once enabled, when Yep is scanning any message it will attempt
  604.         to detect all URLs (Uniform Resource Locator, i.e. http://) and
  605.         make a record of them to the log file specified. Along with the
  606.         URL address it will record the date of the message, who it is
  607.         from (if available), and/or the newsgroup(s) it was posted to.
  608.  
  609.         There is a new section in the yep.cfg labeled beginning with
  610.         [URL EXLUCLUSIONS] (see the yep.cfg comments for more info).
  611.         You can specify up to 25 URLs which commonly occur in your
  612.         reply messages, so Yep will not keep capturing them each time.
  613.         For example, you might want to put any URL which you have in
  614.         your SIG into this list to keep it form being captured over
  615.         and over and over and over and over again.
  616.  
  617.         If you want to capture the URLs in a message you are reading
  618.         you will have to press Shift-R, as if you were going to reply.
  619.         The URLs will be captured, and then exit your editor and press
  620.         Escape, or C, to cancel the reply. A bit awkward, but it's the
  621.         only way Yep gets an opertunity to scan the message.
  622.  
  623.         There are several tools provided to help manage your captured
  624.         URLs. They are all REXX scripts with filenames beginning with
  625.         YepU. Please see the YepU.DOC for details on each of them.
  626.         Briefly, they include tools which will count, trim, filter and
  627.         eliminate duplicates, as well as convert to HTML or Web Explorer
  628.         URL Objects on your OS/2 WPS desktop.
  629.  
  630.         There is no special format to the Yep URL Capture Log. It is
  631.         a plain text file which you are free to edit or modify as you
  632.         wish. The entries for each record can be anything, and in any
  633.         order. The only rules are that there must be at least one blank
  634.         line between each URL record (and no blank lines in a record),
  635.         and at least one blank line at the bottom of the Log File.
  636.  
  637.         In your YEP.CFG file there is a section where you can specify
  638.         URLs to ignore -- so they won't be logged over and over again.
  639.         This is useful especially if you have your web page(s) listed
  640.         in your SIG! See the [URL EXLUSIONS] section of YEP.CFG.
  641.  
  642.  
  643. -7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-
  644. UUencoding with Yep!
  645. --------------------
  646.  
  647.         Have you ever reflected on the irony of how Yarn provides
  648.         excellent built in support to attach a file to your message
  649.         via MIME encoding. Yet to decode a MIME message you need
  650.         an external program which can be finicky to set up. Yarn,
  651.         on the other hand, has a very quick and easy built in method
  652.         to extract and decode a UUencoded file found within a message
  653.         at the touch of a button... yet Yarn has no way built in
  654.         to UUencode a message! With one method you get easy encoding,
  655.         but not decoding; with the other you get easy decoding, but
  656.         not encoding!
  657.  
  658.         Yep provides a very quick and easy way to UUencode a file
  659.         into your messages. When you are at the point in your message
  660.         where you want to UUencode a file and insert it simply type
  661.         the following code:
  662.  
  663.                 {uuen:filename}
  664.  
  665.         The "filename" portion of the code would be, of course, the
  666.         filename (and path if needed) of the file you want to insert.
  667.         As soon as you exit your text editor Yep will notice the
  668.         UUencode command tag and load the file, and using internal
  669.         UUencoding routines, inject it into your message at that point.
  670.         No fuss, no muss. Quick and easy.
  671.  
  672.         You will see a brown capitol "U" while Yep is importing and
  673.         UUencoding the file, just to let you know it found the
  674.         instruction and is attempting to preform it.
  675.  
  676. -8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-
  677. Of Specialized Tags
  678. -------------------
  679.  
  680.         There were a few external programs being used which I decided
  681.         to bloat Yep up a bit by making internal. The small external
  682.         programs are still included in the package for backward
  683.         compatability and flexibility; but if you use any of them
  684.         it will be much faster to take advantage of the new internal
  685.         routines. They are as follows:
  686.  
  687.    {EXPD:#}
  688.  
  689.         This tag will create a usenet timestamp # number of days
  690.         in the future. This is useful for creating "Expires:" headers
  691.         on your messages, if you so desire. An Expires: header, if you
  692.         are not aware of them, specifies an expirey date at which
  693.         time your message should be removed from news servers. There
  694.         is no guarentee that they will be on that day, or before that
  695.         date, but it gives you a chance at some control, at least.
  696.         There are two reasons you may want to use this tag. The first
  697.         reason is that perhaps you feel uncomfortable that there are
  698.         searchable databases of news messages going back YEARS out
  699.         there: anyone stalking you could track your usenet movements!
  700.         I don't know if DejaNews and others will honour the Expires
  701.         header, but they might. The other possibility is if you
  702.         want distant future expiry date for your messages to make
  703.         them last (perhaps annoyingly) long on news servers. I won't
  704.         go into further details about how news servers expires messages.
  705.  
  706.         To create an Expires header in your messages you need to
  707.         create a custom header that might look like this:
  708.  
  709.                 Expires: {ExpD:7}
  710.  
  711.         With the above custom header all of your messages will be
  712.         set to expire in one week (seven days). If you want to set up
  713.         expiry dates for only certain newsgroups then you may want
  714.         to use the conditional {ifNG:string} tag. For example, if you
  715.         want all silly questions in the comp.* hierarchy to expire
  716.         after five days you could make a header like this:
  717.  
  718.                 {ifng:comp.}Expires: {ExpD:5}
  719.  
  720.         Note: the hard coded upper limit for your number of days
  721.         possible until expiry is 1000.
  722.  
  723.  
  724.    {DATE:string}
  725.  
  726.         (Note: This is a "special precedence" tag, see the section
  727.         below on special precedences for more details)
  728.  
  729.         This is an implementation of the "DateTime" program. The "string"
  730.         you give to this tag may contain a wide array of special substitution
  731.         codes which allow you astonishing flexibility to output the current
  732.         date and/or time any way you please, wherever you please (and also
  733.         some other strange things, like the percentage of the year or day
  734.         that has past so far, and other things. For example, the simplest
  735.         way to print the entire current date and time in long form would
  736.         be:
  737.  
  738.                 {Date:It is now @t on @d.}
  739.  
  740.         This would print:
  741.  
  742.                 It is now 4:21 am on Monday, February 16th, 1996.
  743.  
  744.         With different substitutions any format is possible. The complete
  745.         table of possible date/time substitutions follows:
  746.  
  747.                  @d - the full date (Monday, February 16, 1996)
  748.                  @t - 12 time of day (4:21 am)
  749.  
  750.                  unit            no lead   ld zero   ld spce   Nth
  751.                  ----            -------   -------   -------   ----
  752.                  month number  -   @m1       @m2       @m3     @m4
  753.                  day of month  -   @d1       @d2       @d3     @d4
  754.                  12 hour       -   @h1       @h2       @h3     @h4
  755.                  24 hour       -   @H1       @H2       @H3     @H4
  756.                  minute        -   @n1       @n2       @n3     @n4
  757.                  second        -   @s1       @s2       @s3     @s4
  758.                  hundredths    -   @u1       @u2       @u3     @u4
  759.                  day of year   -   @a1       @a2       @a3     @a4
  760.  
  761.                  @y - year    @y1 - 2 digit year
  762.                  @i - am/pm   @i1 - AM/PM   @i2 - Am/Pm
  763.                  @i3 - morning/afternoon/evening
  764.                  @M - month name    @M1 - 3 letters  @M2 - 2 letters
  765.                  @W - weekday name  @W1 - 3 letters  @W2 - 2 letters
  766.                  @W3 - num  @W4 - Nth
  767.                  @p1 - % day gone    @p2 - % year gone
  768.                  @t1 - tenth/Second
  769.  
  770.  
  771.    {POM:#}
  772.  
  773.         The ever popular *new* Phase of the Moon program (POM.EXE) is
  774.         now internal to yep. You may use this tag in headers or wherever.
  775.         The # should be a value between 0 and 12, and represents how many
  776.         decimal places of the moon's current phase should be shown.
  777.         For example {PoM:4} would yield:
  778.  
  779.                 The Moon is a Waxing Crescent (49.0512% of Full).
  780.  
  781.  
  782.    {YPDEC:code}
  783.  
  784.         (Note: This is a "special precedence" tag, see the section
  785.         below on special precedences for more details)
  786.  
  787.         This tag decrypts the given YP-Encrypted code and inserts it
  788.         into your message. The YPEnc program to generate the encrypted
  789.         codes is included with the Yep package, and has it's own little
  790.         documentation file which you should refer to if you think you
  791.         may use this feature. In a nutshell it is to make the storage
  792.         of passwords (such as for use in tags with anonymous remailers)
  793.         slightly safer (but not much more safer) from prying eyes. You
  794.         would use the YPEnc program to generate the code and then save
  795.         the code with this tag in your Yep.Cfg. See the YPEnc.Doc.
  796.  
  797.  
  798.    {RNDN:#:#}
  799.  
  800.         This tag replaces itself with a random number in the given
  801.         range. For example {RndN:2:6} will be substituted with a
  802.         number between 2 and 6 (inclusive). Although I'm sure you
  803.         may just want to generate random numbers in your messages
  804.         for absolutely no reason except to admire the dazzling
  805.         creative beauty of them, there are also some possible
  806.         practical applications. This is a "special precedence" tag
  807.         (see the section below on special precedences for more details).
  808.  
  809.  
  810.    {RNDC:string}
  811.  
  812.         This tag replaces itself with a random character out of the
  813.         given string. For example {RndC:aeiou} will be substituted
  814.         one of the five vowels randomly. Who knows what you might
  815.         use this for. I know what I use it for. (-:
  816.  
  817.  
  818.    {Header:name}
  819.  
  820.         This tag prints out the current value of the 'named' header.
  821.         The headers supported by this function are: To, From, Subject,
  822.         Date, Newsgroups, X-Newsgroups, References, Reply-To, Sender.
  823.         For example {header:subject} would be replaced by the current
  824.         subject line. {header:newsgroups} would be replaced by the
  825.         value of the "newsgroups:" header (if it exists). And so on.
  826.  
  827.  
  828.  
  829. Special Precedence
  830. ------------------
  831.  
  832.         A few of the tags above are given special precedence when
  833.         a line of your message is scanned. What this means is that
  834.         those special tags will be processed first, before any other
  835.         tags.
  836.  
  837.         Yep is not recursive when it scans lines. What this means
  838.         is that normally you can't include Yep tags inside other
  839.         yep tags-- the inner tags will not be processed.
  840.  
  841.         However a few tags have been given the special ability to
  842.         be used inside other tags. Namely: RNDN, RNDC, DATE,
  843.         and YPDEC.
  844.  
  845.         Say, for example, you want to use a different SIG file
  846.         for each day of the week. In your main SIG file you could
  847.         put this tag:
  848.  
  849.                 {ImpF:{Date:@W1}.sig}
  850.  
  851.         The DATE tag inside the IMPF (import file) tag will be
  852.         processed first, and replaced with the @W1 date code
  853.         (see the DATE tag for more details on date codes), which
  854.         is the first three letters of the day of the week. So
  855.         in the above example, on Monday the import tag would
  856.         become {ImpF:Mon.sig}, on Tuesday it would then be
  857.         {ImpF:Tue.sig}, and so on. You could also use other
  858.         Date or Time codes to do other tricks like this.
  859.  
  860.         You could use the RNDN (random number) or RNDC (random
  861.         character) tag to import random filenames which contain
  862.         a range of numbers. Or you could import a random line from
  863.         a file within a certain range of line numbers.
  864.  
  865.         YPDEC could be used to hide a filename in your sig,
  866.         so it is not readable. I have no idea why you might
  867.         want to do it-- but you could if you wanted to!
  868.  
  869.  
  870. -9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-
  871. Block Processing & PGP, and More
  872. --------------------------------
  873.  
  874.         Block processing is a procedure you can set up where you create
  875.         your own tags that will identify blocks of text in a message.
  876.         When you exit your text editor Yep will search for any "Blocks"
  877.         enclosed by these tags and run a user defined process on them.
  878.         The most common possible usage for this technique is for
  879.         encrypting (ie. PGP, or another text encryption program)
  880.         portions of your message. Other more whimsical uses can be left
  881.         to your imagination.
  882.  
  883.         To set up block processing with Yep you need to edit the
  884.         YEP.CFG. Specifically you define block process in the section
  885.         labeled: [BLOCK PROCESSING DEFINITIONS]. There can be up to 15
  886.         blocks defined.
  887.  
  888.         For example to set up a block processing tag to run PGP one might
  889.         use the following definition:
  890.  
  891.                 "{pgp}"::"pgp -seat *i -o *o *p "
  892.  
  893.         This is more simple than it looks. Basically there are two
  894.         sections to the line (the structure is the same as the
  895.         "substitutions" section of the CFG). The first defines the tag,
  896.         which in this case is {pgp}. This will mean that with this
  897.         definition enabled whenever Yep is post-processing your message
  898.         and sees the {PGP} (case doesn't matter) tag in the first column
  899.         it will then process the rest of that block using the command
  900.         given in the second half of the definition above (which will be
  901.         explained in detail below).
  902.  
  903.         The command that is executed on the block must contain at least
  904.         two substitution codes: *i and *o. These will be replaced by yep
  905.         with the "input" and "output" filenames to be used.
  906.  
  907.         The third, optional substitution code you may use in your block
  908.         command line is *p. *P will be replaced by any "parameters" you
  909.         want to pass to your text processing program (please, keep
  910.         reading for further explanation of how this works).
  911.  
  912.         So a detailed breakdown of the "pgp -seat *i *p -o *o" command
  913.         above becomes more clear. The block will run the program "PGP"
  914.         with command line options "-seat" (which tells PGP to sign and
  915.         encrypt a text file with ascii output). The filename will be
  916.         given to pgp in place of the *i, and the output of pgp will go
  917.         to *o using pgp's "-o" switch. the *p in the line will be any
  918.         additional parameters. you can use this to specify who you want
  919.         to encrypt the message to right in your block command.
  920.  
  921.         So, how this works in the message you are writing is as follows.
  922.         Let us assume there is a block of text you want to encrypt in
  923.         your message you are writing to your friend George, you might
  924.         write your message like this:
  925.  
  926.             Dear Peri, the weather here in Tibet is lovely.
  927.             A llama spat in my eye yesterday (i mean the animal,
  928.             not a buddhist monk, this time). And oh yes, by the
  929.             way the secret word of the tetragrammaton is:
  930.             {Pgp peri}
  931.             well, i'll tell you when i get back. I fear the
  932.             U.S. government may have paid off Zimmerman to
  933.             get a back door put into PGP!
  934.             {TheEnd}
  935.             Wish you were here.
  936.             Your Pal, Tim.
  937.  
  938.         So now you can see, the portion of text between the {pgp} tag
  939.         and the {theend} tag (case does not matter), will be sent to the
  940.         PGP program as you defined it. It will be encrypted.
  941.  
  942.         Note, all blocks terminate with the tag {TheEnd}, or at the end
  943.         of the message. If you want the whole remaining portion of the
  944.         message encrypted you do not need to include {theEND}.
  945.  
  946.         Note also that i did not simply use the tag: {Pgp}. In this
  947.         example was used {Pgp Peri}. All text after the block tag, but
  948.         before the closing of the tag, is considered "parameters". These
  949.         are the mysterious parameters that will be sent to the program
  950.         through the *p substitution in the block command definition. So
  951.         in this case "peri" will be sent. In this case it is convenient
  952.         to send the ID of the person you want to encrypt the file to
  953.         that way, instead of being prompted for it by PGP if it is not
  954.         included. The benefit of doing it this way is that you can
  955.         encrypt a message to multiple recipients this way. For example
  956.         if i wanted to encrypt that portion of the text to Peri, Joe,
  957.         and myself, I could have called the block as: [pgp peri tim].
  958.  
  959.         *TIP* Another good hint for using PGP blocks is to define the
  960.         command like so: "pgp -seat *i -o *o tim *p". Notice I put my
  961.         own name (a PGP ID really) in there. This will make every
  962.         message I encrypt also be encrypted to myself (which means I
  963.         will be able to decrypt my own encrypted messages if I should
  964.         need to-- believe me, it has come in handy before!)
  965.  
  966.         Hopefully the above information gives you a good basic
  967.         understanding of how the block processing works, and how to set
  968.         it up. Following will be a few more details which are not
  969.         necessary to know-- so if you are confused already you may want
  970.         to read the above section over again, and skip the below section
  971.         altogether.
  972.  
  973.    Details About Brackets or Tag Enclosures:
  974.    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  975.         Blocks do not have to use square brackets to enclose them, you
  976.         can use anything you want. You could have defined the pgp block
  977.         as "[pgp]". But the essential thing to know about this
  978.         technicality is that whatever characters you use to enclose your
  979.         block command you must use the same characters to terminate your
  980.         block. What i mean is that if you defined pgp with curly braces
  981.         then to terminate the block in your message you also must use
  982.         curly braces around "TheEnd", like so: [TheEnd].
  983.  
  984.    Blocks May be Nested:
  985.    ~~~~~~~~~~~~~~~~~~~~
  986.         Blocks can be nested inside blocks. I don't think I want to
  987.         explain that except to say that it is allowable. (-: A possible
  988.         use would be if you are sending a PGP encrypted message though
  989.         the alpha.c2.org anonymous remailer. The remailer requires your
  990.         message be encrypted to it, but also you want the message it
  991.         sends inside that encrypted message to be encrypted. You
  992.         following what I mean? You could have a message something like
  993.         this... wait! Another thing about the alpha.c2.org remailer is
  994.         that it does NOT want you to "sign" your encryption with PGP. So
  995.         with Yep block definitions you could define two different PGP
  996.         encryption tags which use different PGP command line options.
  997.         For example, in addition to the definition shown above you might
  998.         also do:
  999.  
  1000.                 "[pgpns]"::"pgp -eat *i -o *o *p "
  1001.  
  1002.         Notice the "s" option is missing from the command line. So in
  1003.         this case "pgpNS" might stand for PGP No Signing. ANd so you
  1004.         might encrypt your message like this:
  1005.  
  1006.                 [pgpns alpha]
  1007.                 header: your alpha-style required headers
  1008.                 [pgp your_friend]
  1009.                 Dear my_friend, i'm not sure if this is exactly how the
  1010.                 alpha.c2.org anonymous remailer works, having never used
  1011.                 it; but it is something like this so I thought i'd use
  1012.                 it for an example anyhow.
  1013.  
  1014.         Notice that the first block uses the [pgpns] tag so that PGP
  1015.         envelope is not signed, but the pgp inside the pgp is signed, so
  1016.         to authenticate to your friend that the message is indeed from
  1017.         you. No [theend] is used because in this case we want the entire
  1018.         rest of the text encrypted, so it is not necessary.
  1019.  
  1020.         This is not a full description of how to use alpha.c2.org
  1021.         anonymous remailer; you will have to be creative and figure out
  1022.         how to apply these techniques yourself. (If anyone figures out a
  1023.         good procedure for this and wants to write it up, step by step,
  1024.         I'll include it in my docs).
  1025.  
  1026.   A Few More Details
  1027.   ~~~~~~~~~~~~~~~~~~
  1028.         Any text on the same line following a block tag or a block
  1029.         terminal tag is ignored.
  1030.  
  1031.  
  1032.  
  1033. -10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-
  1034. Anonymous Remailers
  1035. -------------------
  1036.  
  1037.         I have been having some discussion with one of the users of
  1038.         Yep about adding some support for automating posting messages
  1039.         through an anonymous remailer (specifically anon.penet.fi --
  1040.         send a blank message to help@anon.penet.fi if you want more
  1041.         info about this service).
  1042.  
  1043.         (see the end of the section on block processing for more
  1044.         hints on how to use alpha.c2.org remailers)
  1045.  
  1046.         We were brainstorming a scheme to do this (well, i was more
  1047.         confused than anything), when it was realized that it turns
  1048.         out to be as simple as this:
  1049.  
  1050.         Set up the newsgroup you wish to regularly post annoymously
  1051.         in the same as you would set up a "pseudo-newsgroup" with
  1052.         Yarn. That is, run Yarn's NEWGROUP utility something like
  1053.         this:
  1054.  
  1055.         NEWGROUP rec.books.misc 7 30 rec.books.misc@anon.penet.fi
  1056.  
  1057.         Notice you are setting up this newsgroup to keep messages
  1058.         a default of 7 days, and a maximum of 30 days, and at the
  1059.         end you are telling Yarn that all posts to this newsgroup
  1060.         are to be E-MAILED to the anonymous remailer.
  1061.  
  1062.         Now if you are familiar with this remailer service then
  1063.         you will know (and if you aren't familiar with it you are
  1064.         probobly confused by now) that you usually need to use a
  1065.         password on your messages. This is done by adding a header
  1066.         like this:
  1067.  
  1068.                 X-Anon-Password: your_password
  1069.  
  1070.         Yep can detect that the message being written is addressed to
  1071.         the anonymous re-mailer and add the password header line
  1072.         automatically if you set up a custom header like this:
  1073.  
  1074.                 {ifto:anon.penet.fi}X-Anon-Password: password
  1075.  
  1076.         There, with Yep and Yarn you now have pretty much automated
  1077.         the task of coresponding in a newsgroup via this anonymous
  1078.         remailer. This could be useful, for example, if you are
  1079.         Salman Rushdie, hiding out from certain Iranians, but still
  1080.         want to be active in rec.books.misc!
  1081.  
  1082.         For a bit (but not much) more security Yep provides a way
  1083.         to "encrypt" your password in your Yep.Cfg so someone
  1084.         browsing the file won't be able to read it. See the
  1085.         {YPDec:code} tag somewhere above.
  1086.  
  1087.         Thanks to C.B. (now who could that be?!) for getting most
  1088.         of this figured out.
  1089.  
  1090.  
  1091.  
  1092. -11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-
  1093. Of Finding Problems -- Troubleshooting
  1094. --------------------------------------
  1095.  
  1096.    Critical Errors
  1097.    ~~~~~~~~~~~~~~~
  1098.         If there is any sort of critical error, Yep will create a
  1099.         file called "yep.err" with some details of the problem
  1100.         which you can email to me to report the bug.
  1101.  
  1102.    Other Problems
  1103.    ~~~~~~~~~~~~~~
  1104.         If you have having problems with a filter or condition,
  1105.         or other Yep function, to test out your configuration
  1106.         I suggest creating a test message and running YEP from
  1107.         the command line on that message. This is the fastest
  1108.         way to run Yep and try to find out what is going wrong.
  1109.  
  1110.         The easiest way to create a test message is to go into
  1111.         Yarn and reply to a message. Then when in your editor
  1112.         save this reply to some text file to use for testing.
  1113.         (Keep a backup of this text file because if Yep is
  1114.         messing you up you will need to make more copies of
  1115.         it as you continue testing. Make sure the test message
  1116.         has a file extension of .msg or Yep will not interpret.
  1117.  
  1118.         As a last resort send me your configuration file and
  1119.         a test message (preferably zipped up), and an explanation
  1120.         of what you are trying to do, and i'll try and see what's
  1121.         going on for you.
  1122.  
  1123.  
  1124.  
  1125. -12-12-12-12-12-12-12-12-12-12-12-12-12-12-12-12-12-12-12-12-12-12-12-
  1126. History of Revision:
  1127. -------------------
  1128.  
  1129. Version 1.6 - Nov ??, 1996 (this is a beta document)
  1130. -----------
  1131.         + Definable filename extentions, so YEP can be used with other
  1132.           mailers/newsreaders. See "Process=" in the YEP.CFG and the
  1133.           "Yep But Not Yarn" section of chapter 2 above.
  1134.         + Yep now STOPS on some tag errors (mostly file importing)
  1135.           and after printing an error message waits for you to press
  1136.           a key to continue. No more too-fast-to-read errors messages!
  1137.         + New tag: {RNDC:string}. Random characters! See chapter 8
  1138.           above under "Special Tags", and also "Special Precedence".
  1139.         + Major new feature: Block Processing. See section 9 above.
  1140.           A few sample filters have been included for testing out
  1141.           this feature, including: pigsay - simple pig latin filter,
  1142.           rev-rexx - reverses each line of text, rep-rexx - replace
  1143.           letters or paterns with other letters or paterns. These
  1144.           are in the YX-*.ZIP archive included with the YEP archive.
  1145.         + Yep now searches your %HOME%\yarn\ directory for a yep.cfg file
  1146.           FIRST. If none is found there, then the directory yep.exe is
  1147.           executed from is searched (as earlier version do).
  1148.           Easier for multi-user to have individual config files in their
  1149.           home\yarn directories. (No changes necessary to your setup).
  1150.         + New tag: {RNDN:#:#}. Random number generator! See chapter 8
  1151.           above under "Special Tags", and also "Special Precedence".
  1152.         + Certain tags now have "special precedence" and can be nested
  1153.           in other tags (only one level deep). See the section entitled
  1154.           "Special Precidence" (section 8) above.
  1155.         + New tag: {header:name}. This will print the value of certain
  1156.           specified headers. For example {header:subject} will print
  1157.           the value of the "Subject:" header. Headers supported are:
  1158.           To, From, Subject, Date, Newsgroups, X-Newsgroups, References,
  1159.           Reply-To, Sender. (this is intended for use with a possible
  1160.           kludge support for the alpha.c2.org anonymous remailer)
  1161.         + New support to reflow quotes which would normally go beyond
  1162.           the specified right margin. Still can be messy (as it's not FULL
  1163.           reflow support, but only reflows individual lines), but better
  1164.           yarn's usual (lack of) treatment. See the "RightMargin" and
  1165.           "QuoteChar" in the yep.cfg. Note: a RightMargin="0" disables
  1166.           this feature.
  1167.         + Along with the quote reflow support I've made made yep NOT
  1168.           interpret any lines beginning with the specified quote character,
  1169.           as it use to do on every single line before... This should speed
  1170.           up processing of LONG quoted replies significantly.
  1171.         + New small "trouble shooting" section of this doc
  1172.         + more conditional tags IFCC, IFBCC, IFRT.
  1173.         - the url grabber didn't recognize a tab as the end of an url.
  1174.         - cleaned up (restructured) a few routines
  1175.         - another minor extremely rare bug too complicated to explain.
  1176.         - Completely revamped the way all the File I/O channels were
  1177.           handled. This fixed an obscure bug that occured if you inserted
  1178.           a file import tag AFTER entering the text editor. It also
  1179.           increases memory use slightly, but should be more stable.
  1180.         - Increased stack size, just for a little more elbow room
  1181.           during file import recursions
  1182.         - UrlLog="" in the Yep.cfg would crash YEP
  1183.         - Uninitialised variable when exporting URLs caused instability.
  1184.  
  1185.  
  1186. Version 1.5 - March 4, 1996
  1187. -----------
  1188.         + New tag for automatically adding "Expires:" headers in case
  1189.           you want to specify how long your message should live out in
  1190.           cyberspace. See the {ExpD:#} tag in section 9 above.
  1191.         + A new feature: Automatic URL Logging. See the all new section 6
  1192.           of this doc for details. No, not section 8, section 6!
  1193.         + new tag "Import Line Starting-With" {ImpLS:"string"::"filename"}
  1194.           see details in section 3.
  1195.         + scary new uuencode tag! You can now uuencode a file into your
  1196.           message with the ease of typing {uuen:filename}. As soon as you
  1197.           exit your editor the file will be uuencoded like lightning...
  1198.           right into your message; for those not partial to MIME.
  1199.         + Emacs header mode?? (see yep.cfg) [req. by huug@telebyte.nl]
  1200.         + The mysterious ImpLR (import line range) tag.
  1201.         + Added an {IfXN:string} conditional tag for testing the
  1202.           X-Newsgroups: header. [req. of Cheryl Buzzell]
  1203.         + Moved the Phase of the Moon program into Yep so it can be called
  1204.           with the tag {POM:#} where # is the number of decimal places.
  1205.         + Moved the "DateTime" utility into Yep so formatted date/time
  1206.           strings can be added to SIG's or whatever, without shelling.
  1207.           This subroutine can print other weird stuff like the percentage
  1208.           of the day used up so far, and so on... see the docs somewhere.
  1209.         + Added the YPEnc word encryptor into the package. It can be used
  1210.           to encrypt (sort of) passwords in the Yep.Cfg. See YPEnc.Doc.
  1211.         + Devoted a chapter of the doc to using Yep/Yarn and Anonymous
  1212.           Remail services (anon.penet.fi, anyhow). See the table of
  1213.           contents.
  1214.         ? Skipped version 1.4 for religious reasons.
  1215.         - bug bug where most "if" tags didn't work correctly if you had
  1216.           "cleanheader" turned on. Ouch. [Figured out by Han Willemsen
  1217.           J.Willemsen@Inter.NL.net]
  1218.         - some people were experiencing duplicate headers appearing when
  1219.           re-editing messages. Not sure why, but think it's fixed anyhow!
  1220.           [first reported by Jani Patanen (jpatanen@hit.fi)]
  1221.         - Custom headers were being stripped of leading spaces, which was
  1222.           not good for multi-line headers (where the lines after the first
  1223.           were indented... fixed (hopefully not breaking anything else).
  1224.           [alerted raised by Morten Frederiksen (mortenf@login.dknet.dk)]
  1225.  
  1226.  
  1227. Version 1.3 - February 13, 1996
  1228. -----------
  1229.         + new tag "Import Line Number" {ImpL:#:filename} - will import
  1230.           a specified line number of a text file. See section 3.
  1231.         + added a few more meaningful, english, error messages. (-;
  1232.         + faster, faster, faster. Yep should be noticeably faster
  1233.           (modified scanning routines), especially on long messages.
  1234.         - a bug in the "IfFlag" logic found and fixed [thanks to
  1235.           cherylb@tiac.net (Cheryl Buzzell) for help finding this one].
  1236.         - the bug that almost killed me! Many thanks to the longsuffering
  1237.           tsawchuc@kestrel.punk.net (Tim Sawchuck) who reported the
  1238.           strange and mysterious "teh"::"the" substitution bug. After
  1239.           many, many trials and tribulations that could fill a long
  1240.           novel, suffice it to say-- it turned out to have nothing to
  1241.           do with that substitution (the symptom just shows up for Tim
  1242.           during it, but the bug (corruption) happens earlier), and this
  1243.           bug is officially (i hope) squashed, thank God, it nearly killed
  1244.           me. The problem, precisely, occurred if you used substitutions
  1245.           *IN* a custom header *AND* the replacement text was longer
  1246.           than the original text. I hope that clears it up for everyone!
  1247.         - andrews@jolt.mpx.com.au (Andrew Shipton) finally noticed that 
  1248.           Yep wasn't allowing Yarn 'score' files to get passed through to 
  1249.           the editor. Doh! Fixed now, more or less! Sorry about that.
  1250.         - better handling of {IfFlag:} and {SetFlag:} so that blank lines
  1251.           are not left in a situation like this:
  1252.  
  1253.             {ifflag:false}{ifng:yarn}This is the yarn mail list.
  1254.  
  1255.           Previously if this "yarn" was not found in the newsgroups:
  1256.           header then an awkward blank line would have been left behind.
  1257.           No more. Should work much better with long lists of conditions
  1258.           in SIGs or headers.
  1259.  
  1260.  
  1261. Version 1.2 - February 4, 1996
  1262. -----------
  1263.         - very unfortunate bug that kept version 1.1 from running AT ALL
  1264.           with the default yep.cfg due an error and bad parsing of the
  1265.           [substitutions] section of yep.cfg. Fixed. Sorry! (If you
  1266.           removed all blank lines from the yep.cfg it would work)
  1267.  
  1268.  
  1269. Version 1.1 - January 31, 1996
  1270. -----------
  1271.         + the old 255 character per line limit is now 50,000.
  1272.         + new yep.cfg directive: CleanHeader = "No"/"Yes" (see yep.cfg)
  1273.           [thanks to suggestion by someone whom I lost the email of]
  1274.         + new yep.cfg directive: ShowDots = "Yes"/"No" (see yep.cfg)
  1275.         + $l (lower case L) in yep.cfg Editor= statement sets cursor
  1276.           line number to the first line after the quotes in a reply.
  1277.           [thanks to suggestion by lennart.carlson@mailbox.swipnet.se]
  1278.         + bizarre new experimental conditional tags: please see section
  1279.           5 of this document above for details if interested.
  1280.         + custom header lines increased from 12 to 50
  1281.         + maximum substitutions raised from 25 to 100
  1282.         + new yep.cfg directive: CursorAdjust (see yep.cfg)
  1283.  
  1284.  
  1285. Version 1.0 - December 31, 1995
  1286. -----------
  1287.         ? Released. Sort of.
  1288.  
  1289.  
  1290. -13-13-13-13-13-13-13-13-13-13-13-13-13-13-13-13-13-13-13-13-13-13-13-
  1291. Credits:
  1292. -------
  1293.  
  1294. Yarn off-line news/mail reader of DOS and OS/2 (the reason we are gathered
  1295. here today, dearly beloved) is by Chin Huang. (http://www.vex.net/yarn)
  1296.  
  1297. Yes (Yarn Editor Shell) is by Per Goetterup and is a very good DOS program.
  1298. You can check it out as well at... http://www.vex.net/yarn
  1299.  
  1300. And lastly and leastly there's me: Tim Middleton (as544@torfree.net)
  1301. Well gee, I guess I'll join the party at http://www.vex.net/yarn too!
  1302.  
  1303. Sorry if this documentation is a bit crappy and not explained well. (-:
  1304. Just email me if you need help, or post to the Yarn mailing list.
  1305.  
  1306.  
  1307.    -----------------------------------------------------------------
  1308.                  Yarn/2 Bells and Whistle's on the WWW
  1309.                   http://www.vex.net/~x/bells2.phtml
  1310.                     More good Yarn related Stuff!!!
  1311.    -----------------------------------------------------------------
  1312.  
  1313.