home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 1 / crawlyvol1.bin / bbs / today199 / todays.doc next >
Text File  |  1992-04-25  |  48KB  |  923 lines

  1.  
  2.      Version 1.99                                                04/24/92
  3.  
  4.                                   TODAYS.PRG
  5.  
  6.        A program to display events and occurrences on a date in history
  7.  
  8.                              Original program by
  9.                                 Mike Butler
  10.  
  11.                            This Atari ST version by
  12.                                 Chuck Grimsby
  13.  
  14.           Hello out there in FREEWARE-land!  It's me once again, with
  15.      another program.  Or rather, another version of a program!
  16.  
  17.           This program has a rather curious history.  In about 1987 or
  18.      1988, one of my favorite BBSs (The FlightLine BBS (612-544-5118) 24
  19.      hours, 365 Days, 300/1200/2400/9600/14.4 Baud HST/V.32) ran a
  20.      program that created a "Welcome" message to it's users that listed
  21.      what happened on that date in history.  It was a nice program, but
  22.      from time to time it would "hiccup" and strange things would happen.
  23.      After watching these "hiccups" for a while, I finally got fed up and
  24.      decided to do something about it.  I tried to find a copy of the
  25.      program through the 'normal' sources (BBSs, GEnie, CompuServe, etc.)
  26.      but I couldn't find it.  Finally, I requested, and got, a copy of
  27.      the program and it's data files from the SysOp of that BBS.  There
  28.      wasn't any documentation with the programs, but I proceeded to
  29.      "reverse-engineer" the data files to create a program that was a bit
  30.      more stable.  TODAYS.TOS version 1.01 was the result.
  31.  
  32.           After releasing that version to the general Atari ST public, I
  33.      started getting requests, make that REQUESTS, to "enhance" the
  34.      program.  For a while, I granted the requests and I was releasing
  35.      new versions darn near weekly.  Then I got bored with it and moved
  36.      on to other programs.  Late in 1991, I started thinking of the
  37.      program again, got out all those old enhancement requests, added a
  38.      few of my own ideas, and started working on it.
  39.  
  40.           Well, that's my history with the program.  The history of this
  41.      program's concept is even older, and stranger, then that!  Someone
  42.      (sorry, I lost the person's name) was kind enough to E-Mail me a
  43.      copy of the IBM/PC version of TODAY complete with docs! (No version
  44.      of the ST program I've ever seen has had any documentation with it!)
  45.      As it turns out, this program goes way back to the days before there
  46.      were home computers, only main frames!
  47.           According to the information I now have, It was originally
  48.      written by Mike Butler in PL/1 on a VM/CMS system.  He should
  49.      receive all the credit for the data file format, and for most of the
  50.      data in the files as well!  (You'll note a _strong_ San Francisco
  51.      "flavor" to the files.  I assume that's where Mike Butler is or was
  52.      when he wrote them.)
  53.           The two Atari ST versions of the "TODAY.TOS" (note that the
  54.      word "today" is singular) programs I've seen were written by John
  55.      Nastasi.
  56.  
  57.           This program retains _most_ of it's compatibility with earlier
  58.      versions, and even with versions on other computers, however this
  59.      program is HEAVILY enhanced and may use the data files in ways that
  60.      other versions on other computers do not.  To put it another way,
  61.      "This program maintains DOWNWARD compatibility, but not necessarily
  62.      CROSS compatibility!"
  63.  
  64.  
  65.                                    SET UP
  66.  
  67.           Before you begin, you'll need to get a copy of the data files
  68.      from somewhere.  They are fairly easy to find.  Both GEnie and
  69.      CompuServe have them in both their IBM/PC and Atari ST areas.
  70.      Simply do a search for the word 'TODAY' or 'HISTORY' in those areas
  71.      and you'll find them.  NOTE: Many other programs of this type use
  72.      similar data structures and can be easily converted over. See the
  73.      section on DATA FILES for the format of the data files.
  74.           I don't distribute them with this program as once downloaded,
  75.      there's no need to do it again.
  76.  
  77.           Feel free to make up your own (or add to those you already
  78.      have) by following the format laid down in the DATA FILES section of
  79.      this document.
  80.  
  81.           OK, now that you've got some data to work with, you'll need to
  82.      set up a file to tell the program what to do.  This file should be
  83.      named TODAYS.INF and can be created with any word processor or text
  84.      editor that can save ASCII documents.  Take a look now at the
  85.      TODAYS.INF file that was included with this distribution package.
  86.  
  87.           The first line is the path for the program to use to find the
  88.      data files, that is to say the TODAY.mmm monthly files TODAY.LNG,
  89.      TODAYS.HDR and the TODAYS.RPT file. The TODAY.mmm files are the data
  90.      files I mentioned above.  As for the other files, well, at this
  91.      point, don't worry about them.  I'll tell you all about them as we
  92.      go on.  Just be aware that this is the path the program will look
  93.      for it to be.
  94.  
  95.           Line 2 is for any 'additional' files you'd like the program to
  96.      look at.  You only put the extender of the file name on this line,
  97.      not the whole filename and path!  The program will look for a file
  98.      named "TODAY.xxx" (where xxx is the extender) in the path set on
  99.      line 1.
  100.           As an example, if you have two additional files you want the
  101.      program to go through named 'TODAY.HOL' and 'TODAY.MUS', this line
  102.      would be:
  103.      HOLMUS
  104.      Note that there's no periods or spaces between the extenders!
  105.           You may have as many extenders on this line as you want, of
  106.      course. This is just an example of how it would look if you had only
  107.      two.
  108.  
  109.           Note to users of older versions:  In versions before 1.97 the
  110.      program had a 'TODAY.HOL' file hard coded into it.  That's gone with
  111.      version 1.99.  If you still wish to use a HOLiday file, place the
  112.      extender of the file on this line.  Otherwise it won't be read.
  113.  
  114.           Note to new users:  To make it easier to update holidays that
  115.      move around from year to year, it is suggested that you put all
  116.      those holidays into a 'TODAY.HOL' file and put that file in the same
  117.      path with the TODAY.mmm monthly files, and place HOL on line 2.  You
  118.      are not required to do this, but it is suggested.  The reason I
  119.      suggest it is that when it comes time to update those movable dates,
  120.      it sure is a heck of a lot easier to change them if they're in their
  121.      own file, rather then scattered around the 12 TODAY.mmm files.
  122.      (Talking from personal experience...)  If you choose to use a
  123.      HOLiday file, don't forget to put the HOL extender on line 2!
  124.  
  125.  
  126.           Line 3 is for an "Alternate file" if you want to use one.  If
  127.      you'd rather have all your data in one huge file, leave lines 1 and
  128.      2 blank and put the location and name of your one huge file here.
  129.      If you're not using an "alternate file", leave this line blank.
  130.  
  131.           Note: You may use both the TODAY.mmm monthly files, AND the
  132.      'alternate file' if you wish.  Simply fill out lines 1 and 3!
  133.           You can also use all three options, the TODAY.mmm monthly files
  134.      on line 1, the 'additional files' on line 2, and the 'alternate
  135.      file' on line 3 by simply filling out all three lines!
  136.  
  137.           Line 4 is for where you want the output from the program to go.
  138.      This can be a file on a disk somewhere, as shown in the sample
  139.      TODAY.INF file included with the distribution package, or to the
  140.      screen (use the word "CON:" if you want that but with out the
  141.      quotation marks), or "PRN:" if you want it to go to the printer
  142.      (again without the quotation marks).
  143.  
  144.           Line 5.  If you've got some text that you want to show up
  145.      before the data that TODAYS.PRG creates, put that into a text file
  146.      and put the path and name of that file on this line.  TODAYS.PRG
  147.      will "copy" that over to where you've told it to put the output on
  148.      line 4.
  149.  
  150.           Line 6 is for what you want the program to do with any file
  151.      that already has the same name as the output file.  REPLACE or
  152.      APPEND are your only options.  (The program defaults to Append if it
  153.      can't understand what you put there.)
  154.  
  155.           Line 7 is for an "Age value."  The Age Value is used during
  156.      calculated dates.  We'll get further into this later.  If you've no
  157.      idea what to put here now, just put a zero (0) or leave the line
  158.      blank.
  159.  
  160.           Line 8 is another value, but this line is for the "Wrap Value."
  161.      If you have lines that are too long to fit on a 80 column screen in
  162.      your data files, TODAYS.PRG will perform a "word wrap" function on
  163.      the first space before the column you specify on this line.  Again,
  164.      if you'd prefer the program not wrap your lines, leave this line
  165.      blank, or place a 0 on this line.  0 is the only number less then 20
  166.      that this program will recognize, so if you try and place something
  167.      absurd like 5 on this line, it'll just be ignored and no word wrap
  168.      will be performed. (Yes, you can do 20 column word wrapping.  Why
  169.      someone would want to is beyond me, but so be it.  70 to 80 columns
  170.      makes more sense.)  Using a "Wrap Value" assures that everything
  171.      will line up nicely when it's printed out.
  172.  
  173.  
  174.           Line 9 is for the Carriage Return code.  Some users have
  175.      requested that 'hard' returns be used instead of 'soft' returns.
  176.      The codes on this line need to be the ASCII values, and each value
  177.      must be 3 characters long.  To do 'hard' returns, for example, on
  178.      this line you should have:
  179.      013013010
  180.           This will give a 'hard return' which is usually two Carriage
  181.      Returns and one Line Feed character.  (Normally, it's just one
  182.      Carriage Return and a line feed.)
  183.  
  184.           To do 'soft' returns, which are the standard returns on most
  185.      computers, on line 9 you should have:
  186.      013010
  187.  
  188.           BBS SysOps take note:  On some computers, and with some
  189.      terminal programs, use of 'hard' returns can cause what looks like
  190.      double spacing on the user's screens.  What's happening is that the
  191.      Carriage Return character causes the program to _assume_ a Line Feed
  192.      and thus the double space.  The Line Feed itself is 'filtered' out.
  193.      If you get reports of double spacing in the TODAYS.RPT file from
  194.      your users, switch back to using 'soft' return codes by deleting one
  195.      of the 013's on line 9.
  196.           As always, you may use any other type of code on this line that
  197.      you wish to use.  VT-52, VT-100, ANSI, TX2, IGS or whatever.  Just
  198.      use a ASCII chart to convert the characters over to their decimal
  199.      value.  Just make sure all the values are three characters long!
  200.      (Use leading 0's to fill out the value if it's under 100)
  201.  
  202.           Line 10 is to tell the program whether or not it should sort
  203.      the data it collects for this run.  Each "group" or type of data is
  204.      sorted separately.  Sorting helps if you want the display to come
  205.      out in order and your data files are not sorted. Your only options
  206.      here are either "SORT" or "NO SORT" (without the quotes).  The
  207.      program defaults to NO SORT if it can't understand what you put
  208.      here.
  209.           Note: Calculated dates are ALWAYS sorted regardless of what is
  210.      on this line.  You'll read more about Calculated dates later.
  211.  
  212.  
  213.           Line 11 is for those of you who want to know where the data is
  214.      comming from for this program.  If you put the word SHOW as the
  215.      first word on this line, the program will add to the end of each
  216.      line a number you can use to indicate what data file the program got
  217.      this line from.  This is useful when looking for duplicate entries,
  218.      though I don't suggest you leave it on all the time.  The number
  219.      will be enclosed by parentheses "()" so it won't be confusing if you
  220.      have other numbers on the line.
  221.           Numbers 1 through 12 are the months of the year, of course, and
  222.      correspond to the data file for that month.  Numbers above 12
  223.      indicate the additional files you told the program to read on line
  224.      2.  These are files are read in order, left to right, and are
  225.      numbered 13 through however many files you have on line 2.
  226.           If you've specified a 'alternate' file on line 3, the number
  227.      this file receives will be the next number up. If you've left lines
  228.      1 and 2 blank (a 'one big file' user) this file will be numbered 13,
  229.      since that's the next number up.
  230.           For those of you who have LOTS of data, you may want to use the
  231.      the word SHOW2 instead of SHOW on this line.  When SHOW2 is used,
  232.      you'll not only get the number of the file, but the line number
  233.      within the file that the data came from.  The line number will be
  234.      enclosed in brackets "[]".  This helps in the elimination of
  235.      duplicate lines.  (When you have a LOT of data this can be a BIG
  236.      help!)
  237.           Placing SHOW3 on this line gives you the same information as
  238.      SHOW2 plus a number enclosed by {}'s that is a indication of where
  239.      it is in the data collected.  This really has no value to anyone
  240.      except the programmer (me!).  I use it for debugging.  ("Ok, now why
  241.      did that line come out now?!?!")  I thought I'd let you know about
  242.      it though, just in case someone else can find a use for it.
  243.  
  244.           Placing SHOWA on line 11 gives you ALL the above, plus a list
  245.      of the options you've told the program to use.  This is useful if
  246.      you don't get what you asked the program to give you in terms of
  247.      paths, files, and options.
  248.  
  249.           Line 12 is for the maximum number of items you want (or will
  250.      allow) TODAYS.PRG to collect.  The smaller this number is, the fewer
  251.      items will be collected, and the less memory the program will use.
  252.      For most users, 1000 will suit you well, and will fit into a 512K
  253.      machine.  Even 2000 should fit, however that will depend on what
  254.      other programs and ACCs you have running.  Basically, if you
  255.      encounter a 'Out of Memory' error, (TOS code -39 or GFA code 8),
  256.      then you'll have to lower this number.
  257.  
  258.      And that completes the TODAYS.INF file.
  259.  
  260.  
  261.                                   TODAYS.HDR
  262.  
  263.           NOTE: You may want to read the section on DATA FILES before
  264.                 reading this section.
  265.  
  266.           Before you go on, you need to make some decisions.  The
  267.      original TODAY.TOS program, upon which TODAY.PRG is based, forced
  268.      users to have 3 types of data:  Reminders, Special Events, and
  269.      Birthdays.  TODAYS.PRG allows you to have as many as 256 different
  270.      types of data!
  271.            If you've downloaded the TODAYDAT.LZH file, you'll discover
  272.      that all the data in those files are 'broken up' into those same
  273.      three types: S for Special events, B for Birthdays, and R for
  274.      reminders.  Personally, that's a bit too limited for my tastes.  I'd
  275.      rather have Weather related events comming out under their own
  276.      'header' rather then all mixed in with the Special events, and same
  277.      goes for National Holidays, and so on.  So what I did was to sit
  278.      down and set up my own set of 'types' of data.  Weather should go
  279.      under C (for Climatology), National holidays should go under N,
  280.      Deaths under D, and so on and so forth.
  281.           Next, I fired up my Word Processor and created my TODAYS.HDR
  282.      file following the rules outlined below:
  283.  
  284.           1) The first character on the line tells TODAYS.PRG what type
  285.      of data the line is for.
  286.               You can make the code whatever you want it to be, however
  287.      note that "type codes" are case sensitive!  A 'z' is NOT the same as
  288.      a 'Z' to TODAYS.PRG.  There are four types that are hard coded into
  289.      the program that CANNOT be used as type codes:
  290.               $ is for Anniversary events,
  291.               ^ is for Friday the 13th stuff,
  292.               # is for Calculated days, and
  293.               * is for 'Ignore this line'.
  294.  
  295.           You should also be aware that can't use a type code '%' either.
  296.      There isn't a hard coded type %, but the percent sign (%) means
  297.      something special to the part of the program that interprets your
  298.      report format.  Again, you'll read more about that in the REPORTS
  299.      section of this document.
  300.  
  301.           2) The rest of the text on the line, from position 2 on, is the
  302.      text, or actual header, that the program will display before it
  303.      displays the data for that type.
  304.  
  305.           The first 2 lines also have a special meaning to the program:
  306.  
  307.           Line 1 is for when the program can't come up with any data for
  308.      the date.  This is referred to as the "NO DATA" line.
  309.  
  310.           Line 2 is for Friday the 13th.  This is figured out internally,
  311.      so your data files don't have to worry about it.  If you don't care
  312.      about Friday the 13th, just leave this line blank.
  313.  
  314.           The rest of the lines can be for whatever types you want!
  315.           Each line may contain any VT-52 or VT-100, or whatever codes
  316.      you care to put in there.
  317.  
  318.  
  319.           There are two ways to make a multi-line header.  You can either
  320.      declare 2 lines as having the same type code (they are displayed
  321.      from top to bottom) or you can use a "pipe" character (|) in the
  322.      string.  TODAYS.PRG will replace the | character with Carriage
  323.      Return you told the program to use on line 9 of the TODAYS.INF file
  324.      when it is printed out.
  325.           Your lines will *NOT* be automatically centered, or adjusted
  326.      right or left.  If you want the line centered when it prints out,
  327.      you will have to center it in the TODAYS.INF file.
  328.  
  329.           NOTE: You don't have to have 'header' lines except for the two
  330.      I mentioned above for No Data and Friday the 13th.  In fact, you
  331.      really don't have to have those either!
  332.           If you'd rather not know that you don't have any data for the
  333.      run, or if you can figure that out from the lack of data printed,
  334.      simply leave line 1 blank.  (Have the line there, just don't have
  335.      anything on it!)
  336.           The same goes for the Friday the 13th 'header' on line 2.  If
  337.      you'd rather have that in your data files, or if you don't care
  338.      about Friday the 13th, simply leave line 2 blank.
  339.  
  340.  
  341.                                   TODAYS.LNG
  342.  
  343.           The TODAYS.LNG file contains the 'language' or words that the
  344.      program will use for things like the day of the week, the names of
  345.      the months, the time of day, numbers, etc.
  346.           It also contains the words TODAYS.PRG will use in error
  347.      messages, should it need to give one.  You may edit this file as
  348.      much as you like, however: DO NOT CHANGE THE ORDER!  (Things will
  349.      get _really_ messed up if you do!)
  350.           For those of you who would rather have the text come out in
  351.      French, German, Spanish, or whatever, here's where you make those
  352.      changes.
  353.           The only 'tricky' thing about the TODAYS.LNG file is that it'll
  354.      only use the data from the leftmost edge of the line to wherever
  355.      you've put a 'pipe' character (|).  Anything after that is ignored,
  356.      so feel free to make whatever comment after the pipe you wish.
  357.  
  358.           NOTE: Since the way other languages work for converting
  359.      numerical symbols to words is different from English, I can't make
  360.      any sort of guaranty that the routine I use in this program will
  361.      work, but feel free to give it a shot!
  362.  
  363.           ALSO NOTE: If you change the names of the months in the
  364.      TODAYS.LNG file, you'll also have to change the names of the
  365.      TODAY.mmm monthly files.  TODAYS.PRG gets the names of file to read
  366.      by using the three leftmost characters of the month names in
  367.      TODAYS.LNG.
  368.  
  369.  
  370.                                   TODAYS.ERR
  371.  
  372.           If TODAYS.PRG can't understand something in either your
  373.      TODAYS.INF or TODAYS.RPT files, or if it can't find the files you
  374.      tell it to use, TODAYS.PRG will generate a report in the default
  375.      directory called TODAYS.ERR.  This file will attempt to explain to
  376.      you what it found wrong.
  377.           I have to admit here that I didn't try to have the program
  378.      describe in detail every possible error that could occur, but it
  379.      does do things like codes it doesn't understand in your TODAYS.RPT
  380.      file, not being able to find the files you tell it to use, etc.,
  381.      etc.
  382.           When something goes wrong, your first response should be to
  383.      look for a TODAYS.ERR file.  It'll help you fix 99.999% of your
  384.      problems.
  385.  
  386.  
  387.                                   DATA FILES
  388.  
  389.           The file structure of the TODAY.mmm files is a simple, but
  390.      EXTREMELY efficient and effective one!
  391.           There needs to be a separate data file for each month, with the
  392.      extender being the 3-character name of the month. i.e. the January
  393.      file should be named TODAY.JAN, the February file TODAY.FEB, the
  394.      March file TODAY.MAR and so on.
  395.           Just to make sure, the extenders are: JAN, FEB, MAR, APR, MAY,
  396.      JUN, JUL, AUG, SEP, OCT, NOV, and DEC.
  397.           The program reads in these files according to what month the
  398.      system clock is set to.  If the system clock is set for a day in
  399.      January the TODAY.JAN file is read, if it's set for a date in
  400.      February the TODAY.FEB file is read, and so on.
  401.  
  402.           This program doesn't require you to put the data into any
  403.      particular order.  If you want to separate out the birthdays from
  404.      the events and put them in chronological order feel free to do so.
  405.      TODAYS.PRG won't care WHAT order they are in!
  406.  
  407.           All the TODAY.mmm data files follow the exact same format:
  408.           The first 10 characters on each line is data for the program to
  409.      use, the rest is information to be displayed.
  410.           Each event needs a separate line.
  411.           Each line can be as long or as short as you want it to be.
  412.      TODAYS.PRG will "wrap" the lines automatically for you. (This is a
  413.      feature unique to TODAYS.PRG.  The versions on other computers don't
  414.      have it!)  I tested it with a couple of 255 character long lines,
  415.      and it does quite well.
  416.  
  417.           The first character on the line tells the program what type of
  418.      event this is.  Although the original TODAY program only supported 3
  419.      types of events (B for birthdays, S for special events and R for
  420.      Reminders), TODAYS.PRG allows you to use whatever you want for your
  421.      data types, and however many you want!  As I mentioned before there
  422.      are four exceptions to this that are hard coded into the program.
  423.      Those are:
  424.  
  425.           * - Ignore this line,
  426.           $ - Anniversaries,
  427.           # - Calculated days, and
  428.           ^ - Friday the 13th.
  429.  
  430.           Remember as well that you can't use % as a type code due to the
  431.      way that the report generation routine works.
  432.  
  433.  
  434.           The next 4 characters (Columns 2-5) are for the month and day.
  435.      Both the month and the day are ALWAYS 2 characters long each! (i.e.
  436.      January 5th is 0105, February 9th is 0209, and November 21st is
  437.      1121.) You may use spaces instead of 0's as place holders if you
  438.      like, just remember that you *MUST* use either a space or a 0 to
  439.      make everything work right.
  440.  
  441.           The next 4 characters (Columns 6-9) are for the year the event
  442.      or birthday occurred. In cases of holidays and repeating events such
  443.      as the American Independence Day (July 4th) the year isn't used, so
  444.      for Holidays these columns can be left blank.  For years "B.C.", you
  445.      can use a negative number IF it will fit into these four columns.
  446.      Use either spaces or zeros as place holders if you need them for 3
  447.      or 2 digit years.
  448.  
  449.           Columns 11+ are for whatever text you want displayed.
  450.  
  451.           You may have noticed I skipped over the 10th column.  The 10th
  452.      column is a "strange" one, but quite useful.  Suppose you have a
  453.      holiday, like Thanksgiving for instance, that occurs ONLY on
  454.      Thursdays.  In this case, a 5 should be in the 10th column.
  455.      (Thursday is the 5th day of the week.)
  456.           Memorial Day, which can only happen on a Monday, should have a
  457.      2 in column 10 since Monday is the 2nd day of the week.
  458.           Election days in the USA can only happen on Tuesdays, so a 3
  459.      goes in column 10.
  460.           Ash Wednesdays can only happen on Wednesdays, so a 4 goes in
  461.      column 10.
  462.           Good Friday can only happen on a Friday so a 6 goes into column
  463.      10.
  464.           Get the picture?  Saturday Holidays get a 7 and Sunday holidays
  465.      have a 1 in column 10.  (Did I get every day of the week??)
  466.  
  467.           Additionally, if an Event takes two or more lines to describe,
  468.      you can put a C into the 10th column.  This keeps the program from
  469.      printing out the year it happened.  (Since TODAYS.PRG allows the use
  470.      of 255 character long lines, this is fairly rare, but to maintain
  471.      compatibility with older versions, and just in case, I left it in.)
  472.  
  473.           One of the drawbacks with this method is that it requires a
  474.      line for every POSSIBLE date.  Thus, since Mother's Day could happen
  475.      either on May 10th, or May 8th, or May 14th, or May 13th, or
  476.      whatever, you will have to have a separate line for each of these
  477.      dates, and for whatever other possible dates it could occur on AND a
  478.      1 in column 10 so that it will only show up on a Sunday.
  479.  
  480.  
  481.                                CALCULATED DATES
  482.  
  483.           The TODAYS.PRG program also supports six more functions that
  484.      the original TODAY program didn't.  Nor, as far as I can tell, do
  485.      current versions on other computers.  These I refer to as
  486.      "Calculated dates."  Here's how they work:
  487.  
  488.           If there is a asterisk (*) in column 10, the program will
  489.      calculate the number of days from the system date to that date.  The
  490.      program will return with the number of days until that date, then a
  491.      space, then whatever text you have on that line. For example,
  492.      suppose in your TODAY.DEC you have the following line:
  493.  
  494.      S1225    *More shopping days until Christmas!
  495.  
  496.      On November 25th, the program will print out:
  497.         30 More shopping days until Christmas!
  498.  
  499.      On December 16th, the program will print out:
  500.          9 More shopping days until Christmas!
  501.  
  502.      Unfortunately, on December 26th, the program will print out:
  503.        365 More shopping days until Christmas!
  504.  
  505.           If you don't want this line to printed out after the date has
  506.      happened, use a plus sign (+) instead of a asterisk (*) in column
  507.      10.
  508.  
  509.           A minus sign (-) in column 10 gives the number of days SINCE
  510.      the date in columns 2-5.
  511.  
  512.           Remember that "Age Value" on line 7 of the TODAYS.INF file?
  513.      Here is where it is used.  If you have set a Age Value of 30 in your
  514.      TODAY.INF file, and you have a pound sign (#) in column 10 instead
  515.      of the asterisk (*), this line will only be printed out if today's
  516.      date is within 30 days of 12/25.  It won't be printed out after that
  517.      date, or before 30 days before 12/25.
  518.  
  519.           Placing a percent sign (%) in column 10 does the same as a #,
  520.      except instead of giving the number of day until the date, you get
  521.      the number of days since an event, until you hit the Age limit set
  522.      on line 7 of the TODAYS.INF file.
  523.  
  524.           Placing a ampersand (&) in column 10 does the same as using
  525.      both the % and #.  You get both the number of days until the date,
  526.      and the number of days since the date, as long as it's within the
  527.      range set with the Age value.
  528.  
  529.           To review:
  530.  
  531.           If there's a * in column 10, the program will always calculate
  532.      the number of days until the date to the next occurrence.
  533.           If there's a + in column 10, the program will calculate the
  534.      number of days until this date ONLY if the day hasn't come.
  535.           If there's a - in column 10, the program calculate the number
  536.      of days since this date, but only if the day's past.
  537.           If there's a # in column 10, the program will calculate the
  538.      number of days until this date if it's within the Age value.
  539.           If there's a % in column 10, the program will calculate the
  540.      number of days since the date, if it's within the Age value.
  541.           If there's a & in column 10, the program will calculate the
  542.      number of days until AND since this date if it's within the age
  543.      value.
  544.  
  545.  
  546.           Calculated dates are always sorted, regardless of what you have
  547.      in your TODAYS.INF file, so that they always come out in order of
  548.      occurrence, soonest ones first.  To do this, and to save memory,
  549.      there's a built in limit of 50 dates that can be calculated. That
  550.      _should_ be enough for just about anyone.
  551.  
  552.  
  553.                                 ANNIVERSARIES
  554.  
  555.           Type $ events are designed for anniversaries.  When TODAYS.PRG
  556.      finds a $ in column 1 it figures out the number of years from the
  557.      year in columns 6-9 to the present and will print that out instead
  558.      of the year.
  559.           If you don't know the year, just leave that information blank.
  560.      The program won't do a calculation for the number of years, but will
  561.      still display the event.
  562.  
  563.           If you have a line in your TODAY.mmm file that says:
  564.  
  565.      $02021979 Years of marriage for Robin and Dave!
  566.  
  567.      on February 2, 1992 out will come:
  568.          13 Years of marriage for Robin and Dave!
  569.  
  570.           If you have a line in your TODAY.mmm file that says:
  571.  
  572.      $0202     Robin and Dave's Wedding Anniversary!
  573.  
  574.      on February 2, 1992 out will come:
  575.             Robin and Dave's Wedding Anniversary!
  576.  
  577.  
  578.                       YEARLY, MONTHLY AND WEEKLY EVENTS
  579.  
  580.           Through careful use of the month field (columns 2 and 3), the
  581.      day field (columns 4 and 5), the year field (columns 6-9) and column
  582.      10 (as the day of the week field), you can create lines that will be
  583.      displayed on every day of a year, every day of a specific month, on
  584.      a specific date of any month, on specific days of the week, or any
  585.      combination of the four.
  586.           It's best to set up 'categories' for these types in your
  587.      TODAYS.INF and TODAYS.RPT files.  For these examples we'll use type
  588.      Y for Yearly events (a line to be displayed on every day of a year),
  589.      type ! for Monthly events (a line that will be displayed on every
  590.      day of the month) and type @ for our Weekly events (ones that will
  591.      appear only on specific days of the week).
  592.  
  593.  
  594.                                 YEARLY EVENTS
  595.  
  596.           1992 is the Year of the Frog.  Not really, but let's just
  597.      suppose it is.  To set up a line in your TODAY.mmm files, you'll
  598.      first have to set up a Type category Y in your TODAYS.RPT file and
  599.      your TODAYS.INF file for type Y events.  (In the Distribution files,
  600.      I've already done that, so you can just look at those files to see
  601.      how it's done.)  Now, put in your TODAY.mmm files a line that says:
  602.      Y    1992 Year of the Frog
  603.  
  604.      Now whenever TODAYS.PRG is run in 1992, you will get a line that
  605.      says:
  606.           "1992 - Year of the Frog"
  607.      as a part of the 'Yearly Events' listing.
  608.  
  609.           If you only put this line in your TODAY.JAN file, this line
  610.      will only come out in January, 1992.  If you put it only in your
  611.      TODAY.FEB file, it'll only come out in February, 1992.  To have it
  612.      come out on every day of the year you'll either have to put it in
  613.      every TODAY.mmm monthly file, OR in one of the 'additional' files
  614.      you've told TODAYS.PRG to read on line 2 of the TODAYS.INF file.
  615.           The HOL (holiday) file is a good place to put it.  Since the
  616.      additional files are read on every run, the program will be able to
  617.      find it every time it's run.
  618.           Users of the Alternate file (Line 3 of the TODAYS.INF file) can
  619.      put it in there with the rest of their data since that file is read
  620.      every time the program is run.
  621.  
  622.  
  623.                                 MONTHLY EVENTS
  624.  
  625.           Suppose that on every day in February, you want to be told
  626.      that February is "African-American History Month".  Assuming that
  627.      you've set up type ! code to be Monthly events in your TODAYS.INF
  628.      and TODAYS.RPT files, you could then put the following line into
  629.      your TODAY.FEB file:
  630.      !02       African-American History Month
  631.  
  632.      Then on every day in February
  633.            "African-American History Month"
  634.      would be displayed as part of the 'Monthly Events' listing.
  635.  
  636.      The beauty of doing it this way is that you only need one line to do
  637.      something like this instead of one line for each day of the month.
  638.  
  639.  
  640.                                 WEEKLY EVENTS
  641.  
  642.           Weekly events work somewhat like Monthly and Yearly events, but
  643.      with these, they will only come out on certain days of the week.
  644.      For instance, suppose you have this line in your TODAY.HOL file:
  645.      @        6Thank God It's FRIDAY!!!!
  646.  
  647.      Every friday then you would get
  648.            "Thank God It's FRIDAY!!!!"
  649.      displayed as part of the Weekly events listing.
  650.  
  651.  
  652.                  COMBINING YEARLY, MONTHLY AND WEEKLY EVENTS
  653.  
  654.           As I mentioned before, through careful use of the Month, Day,
  655.      and Year fields, along with column 10 as a day of the week field,
  656.      you can create lines that will only show up on specific days of the
  657.      month, months of the year, specific days of the week and so on and
  658.      so forth.
  659.           
  660.           Suppose for instance, you've agreed to water someone's plants
  661.      for the month they're away on vacation.  You could then put a line
  662.      in your data files to remind you to go do so like this:
  663.      @06      5Go water Sue's plants!
  664.      Then every Thursday in June,
  665.           "Go water Sue's plants!"
  666.      would be displayed.
  667.  
  668.           If you want the line to show up ONLY during 1992, adding in
  669.      the year to columns 5-9 like this:
  670.      @06  19925Go water Sue's plants!
  671.      Then every Thursday in June 1992
  672.           "Go water Sue's plants!"
  673.      would be displayed.
  674.  
  675.           You can also use the day field in columns 4 and 5 to cause a
  676.      line to show up or not.
  677.           Suppose your car payment is due on the 15th of each month.  In
  678.      that case you could use the line:
  679.      !  15     Car payment due
  680.      to cause
  681.           "Car payment due"
  682.      to be displayed on the 15th of each month.
  683.  
  684.           Although it may feel like it, you really don't pay for your car
  685.      forever, so by adding in a year value you can cause it to show up
  686.      only during a specific year:
  687.      !  151992 Car payment due
  688.      Now "Car payment due" will only show up on the 15th of the month
  689.      during 1992.
  690.  
  691.           By making several lines that are the same except for the year
  692.      you could cause it to appear over the life of the loan:
  693.      !  151992 Car Payment due
  694.      !  151993 Car Payment due
  695.      !  151994 Car Payment due
  696.  
  697.      If the above lines are in your data file(s), "Car Payment due" will
  698.      be displayed along with the other monthly events on the 15th of
  699.      every month from 1992 to 1994.
  700.  
  701.  
  702.                                    Reports
  703.  
  704.           Starting with version 1.20 users can now "design" the output
  705.      report through the use of a "TODAYS.RPT" file.  TODAYS.PRG will look
  706.      in three locations for this file, and use the first one it finds.
  707.      It will first look in the path set on line 1 of the TODAYS.INF file,
  708.      then in the default directory where TODAYS.PRG and TODAYS.INF are,
  709.      and then where the Alternate data file is (if you're using one)
  710.      that's on line 3 of the TODAYS.INF file.
  711.  
  712.           The use of a TODAYS.RPT file is not required, the program has
  713.      it's own built in "default" report.  This report will also come out
  714.      whenever TODAYS.PRG finds something in the TODAYS.RPT file it
  715.      doesn't understand in which case you'll also get a error report of
  716.      it in your TODAYS.ERR report.
  717.  
  718.           TODAYS.RPT may contain any characters including VT-52, VT-100,
  719.      TX2, or IGS codes so feel free to knock yourself out with that stuff
  720.      if you're into it. (Personally I don't care much for it, but then
  721.      I'm not running your system, am I??)
  722.  
  723.           The TODAYS.RPT file format uses a group of four and five
  724.      character "codes" to tell the program where you want to have
  725.      information printed out at.  It's fairly simple, but VERY confusing
  726.      so please read carefully!
  727.  
  728.           Wherever you have %F1% in your TODAYS.RPT file, the program
  729.      will replace it with the day of the week (i.e. Monday, Tuesday,
  730.      Wednesday, ect.)
  731.           Wherever you have %F2% in your TODAYS.RPT file, the program
  732.      will replace with the name of the month.
  733.           Wherever you have %F3% in your TODAYS.RPT file, the program
  734.      will replace with the day of the month.
  735.           Wherever you have %F4% in your TODAYS.RPT file, the program
  736.      will replace with the year.
  737.           Wherever you have %F5% in your TODAYS.RPT file, the program
  738.      will replace with the day of the year, as counted from the first day
  739.      of the current year. (Also known as the 'Julian Period'.)
  740.           Wherever you have %F6% in your TODAYS.RPT file, the program
  741.      will replace with the days left in the current year.
  742.           Wherever you have %F7% in your TODAYS.RPT file, the program
  743.      will replace with the Julian Date, as counted from 1/1/4713 B.C.
  744.      (NOTE: for many years to come, this will be a 7-digit number.)
  745.           Wherever you have %F8% in your TODAYS.RPT file, the program
  746.      will replace with the days left in the month.
  747.           Wherever you have %FS% in your TODAYS.RPT file, the program
  748.      will replace with the current season.
  749.  
  750.  
  751.           Wherever you have %HA% in your TODAYS.RPT file, the program
  752.      will replace with the header line for type A events (the line that
  753.      begins with A in your TODAYS.INF file) and the type A events it's
  754.      found from the TODAY.mmm files.
  755.  
  756.           Wherever you have %HB% in your TODAYS.RPT file, the program
  757.      will replace with the header line for type B events (the line that
  758.      begins with B in your TODAYS.INF file) and the type B events it's
  759.      found from the TODAY.mmm files.
  760.  
  761.           Wherever you have %HC% in your TODAYS.RPT file, the program
  762.      will replace with the header line for type C events (the line that
  763.      begins with C in your TODAYS.INF file) and the type C events it's
  764.      found from the TODAY.mmm files.
  765.  
  766.           And so on and so forth for all the lines in your TODAYS.RPT
  767.      file.
  768.  
  769.           You've noticed, no doubt, that the word "Monday" is longer then
  770.      "%F1%", as are most of the other words. The %'s act as Start/Stop
  771.      marks for the program, and the words are inserted BETWEEN them, and
  772.      the %'s are deleted.
  773.  
  774.           If the TODAYS program 'collects' a line that begins with a
  775.      character not in your TODAYS.RPT file, the line won't be printed out
  776.      or displayed.  It's simply ignored.  So be certain to include a line
  777.      for each type of data that is in your data files with a matching
  778.      %H command in your TODAYS.RPT file.  (unless you don't want it
  779.      displayed, of course!)
  780.           If you don't want the Type B events the program finds to be
  781.      "printed" out, simply don't use the %HB% code in your file, or if
  782.      you don't want any type E events to be printed out then don't use
  783.      the %HE% code.
  784.  
  785.            I've also built in a number of additional options for each of
  786.      the %F options because I believe that YOU should be able to make
  787.      things as much as possible to YOUR liking not mine.  The file
  788.      TODAYS.RPX which was included in the distribution archive is a
  789.      'chart' that explains all the various options you can use in your
  790.      TODAYS.RPT file.  You may want to rename the file to TODAYS.RPT and
  791.      run the TODAYS program once to see what all the various options come
  792.      out like.  Notice what happens to the file in terms of word
  793.      wrapping.  (The TODAYS.RPT file is NEVER word wrapped!)
  794.  
  795.           You can use and re-use the commands as much as you want in your
  796.      TODAYS.RPT file, or not use them at all as you wish!
  797.          If one of the %F commands you use in your TODAYS.RPT file isn't
  798.      a valid command, one of two things will happen.  Either the code
  799.      won't be converted, or an error will be generated and the program
  800.      will use it's built in report format.  The error will be reported in
  801.      the TODAYS.ERR file.
  802.  
  803.  
  804.        A WORD ABOUT THE TODAYS.RPT, THE DEFAULT REPORT AND HEADER LINES
  805.  
  806.           If you've reached this point in the documentation you're
  807.      probably some what confused on what all is going on with these
  808.      reports.  The program has a built in report, but you can use your
  809.      own, and why are all the header lines for the various types in the
  810.      TODAYS.HDR file rather then in the TODAYS.RPT file?!?  And if we
  811.      don't have to have those header lines, why are they there?!?
  812.  
  813.           A bit of history about the program may answer those questions
  814.      for you.  The original TODAY/ST program, and even the current
  815.      TODAY/PC program allows users to have only 3 types of data:
  816.      Birthdays, Special events, and Reminders.  The programs separated
  817.      the types for you, provided their own headers, and that was that.
  818.      Very little user customization is allowed.
  819.           Even in the most current version of TODAY/PC (version 3.4 as of
  820.      this writing) about all the user can select is the colors of the
  821.      various parts of the display.  None of the %F options are available,
  822.      nor are any of the %H options.  You get what the programmer likes,
  823.      and that's it.  Period.
  824.           Personally, that's too restrictive for my tastes (and hopefully
  825.      yours!), so I added in the TODAYS.RPT file.  In there, users can
  826.      customize to their heart's delight.  The 'headers' were still in
  827.      the TODAYS.RPT file at this point, and not in the TODAYS.HDR file.
  828.      But there was a problem.  Suppose you didn't find a birthday in your
  829.      run.  Well, out would pop the header for birthdays, but since there
  830.      weren't any birthdays to display all you got was a blank line.
  831.           Likewise, in the built in report, there was a problem.  How
  832.      could I 'move' the header lines from the TODAYS.RPT file to the
  833.      built in report?  Especially if the user choose not to use a
  834.      TODAYS.RPT file at all!
  835.           After fiddling around a while, I decided to put the header
  836.      lines into the TODAYS.HDR file.  This allowed them to be in two
  837.      places at the same time (both the TODAYS.RPT file and the built in
  838.      report) and still allowed them to be user configurable.  Plus, by
  839.      first looking to see what data the program had collected, the
  840.      program could figure out which to use and which not to use!  (For a
  841.      while the header lines were in TODAYS.INF, but this confused some
  842.      users.)
  843.  
  844.           Although putting the header lines in the TODAYS.HDR file solved
  845.      one problem, it's created another.  (It always seems to work that
  846.      way.)  Suppose you declare a type in your TODAYS.RPT file, but don't
  847.      make a header line for it in your TODAYS.INF file?  Well, the answer
  848.      is is that it'll still be printed out, there just won't be a header
  849.      line for it.  Also, if you've got your TODAYS.RPT file set up like
  850.      I've set it up in the one that was distributed with the program,
  851.      it'll appear to 'merge' in with the data from the previous type.
  852.      That will also happen if you're using the built in report.
  853.  
  854.  
  855.                                  LEGAL STUFF
  856.  
  857.           This program was written in GFA Basic version 3.something or
  858.      another.  (3.5E I think, but do you really care?  It could of been
  859.      3.0something.  I don't keep too close of a track of that.)  This
  860.      work is my own, I didn't 'borrow' any routines from anyone else.
  861.      (Whopee.)
  862.  
  863.           The program name, TODAYS.PRG, the documentation and the program
  864.      itself is copyright 1992 to me, Chuck Grimsby, however feel free to
  865.      distribute it as far as you feel you want to.  You do not have to
  866.      send me any money to use this program.  I donate it's USE to the
  867.      general Atari ST/TT user base freely.  (Heck, I'm going to program
  868.      regardless what bucks you send!  Programming is my hobby.  It's what
  869.      I call 'fun'.)
  870.           If you feel a real need to send money, send it to some charity
  871.      you feel deserves it.  (Feel free to include your own retirement, or
  872.      kid's college fund.)
  873.           Those of you who are married, send a flower or some cheap gift
  874.      to your spouse.  (That includes you women out there!)
  875.           Those of you who are single, send one to your mom, dad, sister,
  876.      brother, girlfriend, co-worker, or present one to some stranger you
  877.      pass on the street.  (It's fun. The looks on their faces...)
  878.           Formerly married?  Send one to your ex-spouse.  That'll confuse
  879.      the heck out of them!  <grin>  (Probably'll blow their lawyer's mind
  880.      too!)
  881.  
  882.      What else should I say here?  Oh, I suppose something like:
  883.  
  884.          "You use this program at your own risk.  I cannot be held
  885.           responsible for any monetary loss incurred by it's use or
  886.           mis-use, fitness for use, or inability to use."
  887.  
  888.      Or something like that.  Basically, if you choose to use the
  889.      program, don't blame me if things go wrong.  All I can say for sure
  890.      is that it works on my system, with my data files, and my system
  891.      configuration. (A Atari 520 STm running TOS 1.0 and a 1/2 meg of
  892.      memory.)  (I used to have a full meg, but something went wrong
  893.      somewhere and I haven't had the time to fix it yet.  OK, so I'm also
  894.      lazy.)
  895.  
  896.  
  897.           Well, that's it.  I'm tired, it's late, and I've promised
  898.      people that I'd release this in the morning, so I'm done.  Good
  899.      luck, and have fun.
  900.  
  901.           Opps!  Almost forgot!
  902.  
  903.           Problems?  Questions?  Requests for changes?
  904.  
  905.           All of the above can be sent to me at the electronic address
  906.      below:
  907.  
  908.      Chuck Grimsby
  909.  
  910.      The FlightLine BBS  (612-544-5118 1200/2400/9600 (dual) 24 hours)
  911.      FIDO-Net:           1:282/47.0  (That's the FlightLine as well!)
  912.      GEnie:              C.GRIMSBY
  913.      UseNet:             chuck.grimsby@tdkt.kksys.com
  914.  
  915.           I also read the Atari_ST echo on FIDO-Net and the Usenet's
  916.      comp.sys.atari.st newsgroup, so you can send me a message through
  917.      there as well.
  918.  
  919.           OK, _now_ I'm done!  (Probably cooked my own goose somewhere
  920.      too!  Oh, well.)
  921.  
  922.  
  923.