HOLIDAYS.TXT - this is a description of some cool features in the 
HOLIDAY.CC library of code, and the MAKEHOLS.WFM file -- which
may be being under-used by people creating applications ...

The holidays.cc file contains many methods that may be useful, but
one that looks really complex (at the end -- MAKEHOLS()) looks
more complex than it really is, and can be very handy
for the developer of business applications (in particular).

Jay Parsons wrote the original routines, and I (Ken Mayer, with
lots of help from Gary White) have made a few changes, but did NOT 
change the actual logic for determining holidays -- Jay did a LOT of 
hard research on these, and knows more about them than I ever will.

A brief description:

MAKEHOLS (the method) uses a table (MAKEHOLS.DBF -- included
in the dUFLP library) to store a "master list" as it were of 
holidays and non-work days (Saturdays/Sundays, for example, in 
America, for most white-collar jobs are non-working days). This 
table has several fields, and you need to read the documentation 
in the method for details on how to use them. 

	In order to assist, I threw together a form (MAKEHOLS.WFM) that 
   uses the table and allows you to modify or add your own holidays. 
   The documentation from HOLIDAYS.CC is included in the file 
   MAKEHOLS.TXT (used by the "topicInfo" buttons for the fields). 
   This form does NO error checking, however ...

	If you wish to distribute the form MAKEHOLS.WFM make sure you 
   read the header information of the form -- it details which files 
   need to be included in your project ...

The MAKEHOLS method uses the table, as mentioned above, to generate
a table of holidays and non-working days, which will be named 
HOLSnnnn.DBF, where the 'nnnn' is the four-digit year. This table
should include all Saturdays/Sundays in year, as well as any holidays
that are listed in the MAKEHOLS table, unless those holidays evaluate
to the same date as something else in the table (like a Saturday or
Sunday ...).

The WORKDAYS method was modified by Gary White -- I stared at it too
long and couldn't figure out how to convert it over to the OODML methods,
but Gary took one look and got it running.

The ISHOLIDAY method also uses these tables, and if needed will create
the table for the 'current' year. This can be called from an entryfield 
(see below), or any coding you need -- the idea is that it will move the
date off the holiday or non-working day to a working day (one not
listed in the table). When you call this method, you pass the date you
wish to check and the direction to move the date ("F" for Forward or
"B" for Backward).

ISHOL is a method that simply returns a logical value if the date
passed to it is contained in the appropriate table. This can be used
to create your own code (move the date forward/backward, etc.) to
manipulate the data ...

In the file: FORMCNTL.CC is a new (as of 10/19/1998) entryfield
kmCustDateEntryField -- this has logic to use the IsHoliday method
of the holiday class. (And yet another new entryfield added
(10/20) to do the same kind of thing but give your user some 
options, using the IsHol() method ...)

Enjoy. You may also want to check out some of the other routines in
this custom class, as there are many useful ones here ...

DEPLOYMENT NOTES:
If you wish to deploy the "whole package", you need the following:

   MAKEHOLS.WFM     // only if you wish to deploy the form to allow
                    // users to add holidays to standard list
      dUFLP.CFM     // custom form that this is based on
      FORMCNTRL.CC  // (various custom controls)
      MOREBTNS.CC   // (TopicInfoButton)
      CUSTBUTT.CC   // (standard nav. buttons -- custButtLanguagefile.h
                    //  also needs to be compiled into the file)
      SEEKER.CC     // (ships with Visual dBASE 7)
      MAKEHOLS.TXT  // As above -- this is only used with the form
   FORMCNTRL.CC     // if you wish to use pre-made entryfields for
                    // date handling
   MAKEHOLS.DBF     // the rest of these are ** required **
   HOLIDAY.CC
   HEBREW.CC
   DATEEX.CC
   TIME.CC
   SETPROC.PRG

(Note, I had lots of help on this from Gary White -- from the
"credit where credit is due" department ... <G>)

Ken Mayer, dUFLP librarian
10/20/1998

