1 pcal

    Pcal generates  PostScript  to  produce  landscape or portrait
 calendars for any  month and year.  The arguments month, year, and
 nmonths, if provided, should  be  numeric.  The month value should be in
 the range 1  - 12, and the year value should be specified as 1 or 2
 digits or as  the  full  4  digit  year.    If  no  numeric arguments
 are provided, the calendar for the  current  month  and year will be
 generated.

    If one numeric argument is provided, it is interpreted as the year
 value, and calendars for the entire year will be generated.  Otherwise,
 nmonths months, starting with month and year, will be generated.

    For whole-year calendars (i.e. the -w option is given), the command
 line arguments are interpreted somewhat differently.  By default, all
 months in the current year are printed, starting with January.  If the
 month argument alone is given, it is expected to be the desired year to
 print, and prints all of the months in the given year.  If both month
 and year are given, then 12 consecutive months are printed starting at
 the given month and year.  If the month, year, and nmonths arguments are
 all present, printing begins with the given month and year and nmonths
 months are printed, rounded up to the nearest multiple of 12.

 Syntax:

     pcal [-e|-f cal] [-o file] [-j | -J] [-l | -p] [-m | -M] [-g weekday]
          [-weekday]|all|holiday] [-O weekday]
          [-weekday]|all|holiday] [-G weekda]
          [-weekday]|all|holiday] [-b weekday]
          [-weekday]|all|holiday] [-s [date_shade][/fill_shade]]
          [-F day] [-A|-E] [-t [title_font][/size]]
          [-d [day_font][/size]] [-n [text_font][/size]]
          [-r [mapping] [-L footer_str] [-C footer_str]
          [-R footer_str] [-N notes_str] [-D symbol] [-U symbol]
          [-x xscale] [-y yscale] [-X xtrans] [-Y ytrans] [-I]
          [-c | -H] [-z time_zone] [-B] [-# n] [-S | -k | -K] [-w]
          [-h | -u | -v] [-a language] [-T [B|I|R]] [month]
          [year] [nmonths]

2 Options

     Pcal has many options.

    Any option (except -G and -O, for backward-compatibility) which
 normally takes an argument may be specified without the argument in
 order to reset the value to the program default.  Note that while the -D
 option alone clears all the defined symbols, the -U option alone has no
 effect.  The - (or -- as per System V) argument may be used to
 disambiguate command lines such as:

          pcal -t 9 90

    This could be written instead as one of the following:

          pcal -t - 9 90
          pcal -t -- 9 90

    If the environment variable PCAL_OPTS is defined, its contents are
 parsed as a command line.  Flags set via PCAL_OPTS override the program
 defaults, but are overridden by options set via opt lines in the
 .calendar file or explicitly on the command line.

3 -e
          Prints an empty calendar.  Do not print entries from a
          .calendar file even if one exists.

3 -f cal
          Directs pcal to use the file name cal as the input file in
          place of the default .calendar file.  Note that the search
          rules are different when -f is used.  If cal is an absolute
          file name (i.e., starting with a `/'), then pcal attempts to
          open only that file.  Otherwise, pcal looks for cal in the
          current directory, then in the directory indicated by the
          environment variable PCAL_DIR (if defined), and finally in the
          directory where the pcal executable resides.  If the given cal
          file is not found, an error results.

3 -o file
          Directs pcal to write the output to file instead of to stdout.

3 -l    
          Causes the output to be in landscape mode (default).  This also
          resets the x- and y-axis scaling and translation factors to the
          defaults for landscape mode.

3 -p    
          Causes the output to be in portrait mode.  This also resets the
          x- and y-axis scaling and translation factors to the defaults
          for portrait mode.

3 -j    
          Causes the Julian date (day of year) to be printed in each
          calendar box.

3 -J    
          Causes the Julian date and the number of days remaining in the
          year to be printed in each calendar box.

3 -m      
          Causes moon icons to be printed on dates corresponding to new,
          half, and full moons (the default is that no moons are
          printed).

3 -M    
          Causes moon icons to be printed on all dates (the default is
          that no moons are printed).

3 -g day1[-day2] | all | holiday
          Causes all dates falling on weekday day1 (through day2 if
          specified) to be printed in gray; -g all causes all weekdays
          (other than holidays) to be printed in gray;  -g holiday causes
          all holidays to be printed in gray.  day1 and day2 may wrap
          around weekends; for example, -g fri-sun causes Fridays,
          Saturdays, and Sundays to be printed in gray.

3 -O day1[-day2] | all | holiday
          Similar to -g, but the selected days will be printed as
          outlined characters.

3 -G day1[-day2] | all | holiday
          Similar to -g, but the selected days will be printed as
          outlined characters filled with gray.

3 -b day1[-day2] | all | holiday
          Similar to - you guessed it - -g, but the selected days will be
          printed in black.  Since black is the default for weekdays, -b
          is primarily used to overriding other flags (e.g., -g all -b
          sat-sun ).

         Note:
          The default for the above options is to print Saturdays,
          Sundays, and holidays in gray and all other days in black.  For
          backward compatibility with earlier versions of pcal, -O and -G
          alone change all non-black days to the specified color.

3 -s [date_shade][/fill_shade]
          Overrides the default values for date and/or fill box shading.
          These values must be in the range 0.0 (black) through 1.0
          (white); they may be set independently of each other.  The
          default values are 0.8 for dates and 0.9 for empty boxes.

         Note:
          For use with color printers, date_shade and fill_shade may
          optionally be specified as a set of red:green:blue values; red,
          blue, and green must in the range 0.0 through 1.0.  At least
          one ':' must be present for this option to be recognized;
          omitted values are set to 0.0.

3 -F day
          Selects weekday day as the first day of the week.  The given
          day will appear in the left-most column of the calendar.  day
          may be specified either as a weekday name or, optionally, as a
          number in the range 0 (Sunday) through 6 (Saturday).

3 -A    
          Directs pcal to use American date conventions mm/dd{/yy} and
          month dd ) when parsing the date file (default).

3 -E    
          Directs pcal to use European date conventions dd/mm{/yy} and dd
          month ) when parsing the date file.

3 -X xtrans
          Specifies the x-axis translation value for positioning the
          output on the page.

3 -Y ytrans
          Specifies the y-axis translation value for positioning the
          output on the page.

3 -x xscale
          Specifies the x-axis scaling factor for the calendar size.

3 -y yscale
          Specifies the y-axis scaling factor for the calendar size.

3 -t [title_font][/size]
          Specifies the name of a font to use to print all the calendar
          heading text: the month name and year at the top of the
          calendar, the weekday names, the notes box heading, and the
          foot strings.  The user may optionally specify the font size
          for the month/year heading (single-month calendar only); for
          example, pcal -t Times-Roman/54 sets the font to Times-Roman
          and the month/year point size to 54.  The font size may also be
          changed independently:  pcal -t /54 changes the point size to
          54 without affecting the font name.

3 -d [date_font][/size]
          Similar to the -t option, but selects the font and/or size used
          to print the dates.

3 -n [text_font][/size]
          Similar to the -t and -d options, but selects the font and/or
          size used to print the text associated with each day and in the
          "Notes" blocks.

3 -r [mapping]
          Specifies an 8-bit character set remapping for printing the
          diacritical marks common to European languages;  mapping may be
          "Roman8" (ROMAN-8 extended character set), "Latin1" (ISO
          LATIN-1 extended character set), or "none" (builtin 8-bit
          mappings only).  It may be abbreviated to a single character if
          desired.

3 -D symbol
          Defines the named symbol prior to reading the date file.

3 -U symbol
          Un-defines the named symbol prior to reading the date file.

3 -L string
          Causes the accompanying string to be printed as a
          left-justified footer.  Format specifiers denoting the month
          and/or year may appear in the string; the appropriate values
          will be substituted upon printing.

3 -C string
          Similar to -L, but causes the accompanying string to be printed
          as a centered footer.  If the -H flag (generate calendar as
          HTML table) was specified, this string will be used as the
          title and heading.

3 -R string
          Similar to -L, but causes the accompanying string to be printed
          as a right-justified footer.

3 -N string
          Causes the accompanying string to be printed as the heading for
          the "Notes" box.  Note, however, that pcal makes no attempt to
          ensure that it fits.

3 -B    
          Causes pcal to leave unused calendar boxes blank (default is
          gray).

3 -# n  
          Causes pcal to print n copies (maximum: 100) of each output
          page.

3 -S    
          Causes pcal to suppress printing the small calendars.  See the
          CAVEATS section for further details.

3 -k    
          Causes pcal to print the small calendars in the upper left
          corner (the default is to print them at the lower right).

3 -K    
          Causes pcal to print the small calendar for the previous month
          in the upper left corner and the next month in the lower right
          (the default is to print both at the lower right).

3 -w   
          Causes pcal to print a calendar for 12 consecutive months: 3
          rows / 4 columns in landscape mode, 4 rows / 3 columns in
          portrait mode.  See the CAVEATS section for details on the use
          of this option with other options.

          Pcal predefines the symbol whole_year when the -w flag is in
          effect.

3 -c   
          Causes pcal to generate a date file suitable for use as input
          to the Un*x calendar(1) utility.  The normal PostScript output
          is suppressed.

3 -H   
          Causes pcal to generate a calendar in HTML table format.  The
          normal PostScript output is suppressed.

          The HTML table format does not support moons, Julian dates,
          alternate date colors, left or right footstrings (but see the
          -C flag), alternate fonts/sizes, transformation and scaling
          factors, fill box shading, or Esperanto.

3 -z time_zone
          Forces pcal to ignore the moon file and to use its internal
          algorithm for moon phase calculations, adjusting the phase by
          time_zone hours (where time_zone is expressed in hours west of
          UTC).

3 -I    
          Resets all parameters to the program defaults.

3 -h    
          Causes pcal to write version information, parameter usage
          message, and full explanation of options and file formats (to
          stdout) and terminate.

3 -u    
          Causes pcal to write version information and parameter usage
          message (to stdout) and terminate.

3 -v    
          Causes pcal to write version information only (to stdout) and
          terminate.

          Pcal predefines the symbol vX_X, where X_X denotes the current
          version of Pcal (i.e., v4.7 predefines v4_7).

3 -a language
          Select the language for the names of months and days.  As of
          v4.6, the following languages are supported:  de (German), en
          (English) eo (Esperanto) es (Spanish), fr (French), gr (Greek),
          and it (Italian).  The default is en.

          Note: In order to display diacritical marks, languages other
          than English require that the fonts be remapped (typically via
          the "Latin1" remapping).  If no remapping is specified, pcal
          selects a remapping appropriate to the selected language; note
          that the Greek language also requires an ELOT-928 font
          (available from ah@doc.ic.ac.uk).  Also see the -r and -t
          options.

          If Esperanto is selected, Pcal converts [cghjsuCGHJSU][xX^] and
          [uU][xX~] to the corresponding accented character; e.g.
          "jxauxdo", "j^au~do", or any equivalent form will print as
          "j-circumflex a u-breve do".

          Day and month names in the date file may be expressed in either
          the default language specified at compile-time or the language
          selected on the command line.

          Pcal predefines the symbol lang_XX, where XX is the
          two-character abbreviation for the selected language.

3 -T [B|I|R]
          Select the default typeface (Bold, Italic, or Roman) for
          printing date/note text.  This flag may be specified multiple
          times within the date file (via "opt") to reset the font style
          on the fly for example, to print all holidays in Bold.

2 Date_File

    By default, pcal simply prints an empty calendar.  Its real power is
 in its ability to place "events" in appropriate days on the calendar,
 thus allowing the user to create personalized calendars.  This is
 achieved through the use of the "date file".

    The date file is named .calendar (pcal.dat under MS-DOS), or calendar
 for compatibility with older versions.  Pcal will look in several places
 for such a file.  First, if the environment variable PCAL_DIR is
 defined, pcal searches the directory indicated by that variable.  Next,
 pcal searches the user's home directory (as specified by the HOME
 environment variable).  If neither PCAL_DIR nor HOME is defined, pcal
 searches the current directory instead.  Finally, the directory where
 the pcal executable resides will be checked.  If no date file is found,
 an empty calendar is printed; no error is generated.

    If a date file is found, it will be searched for lines with leading
 dates matching the requested month and year.

    Any text following the dates found will be printed on the calendar
 under the appropriate day of the month

    troff-style escape sequences \fB, \fI, \fP, and \fR may be used to
 set the font style to Bold, Italic, the previous font style, or Roman
 respectively.  For those more familiar with HTML, <B>, <I>, and </B> or
 </I> may be used instead to set the font style to Bold, Italic, or the
 previous font style respectively.  The font style is reset to Roman
 after each line break.

    Dates in the .calendar file may be expressed in any of several
 formats:

          <ordinal> <day_spec> in <month_spec>{*} {<text>}
          {<ordinal>} <day_spec> <prep> <date_spec>{*} {<text>}
          <date_spec>{*} {<text>}
          <holiday>

    Where:

          <month_name>     := first 3+ characters of name of month, or "all"

          <month_spec>     := <month_name>, or "year"

          <day_spec>       := first 3+ characters of name of
                           weekday, "day", "weekday", "workday",
                           "holiday", "nonweekday", "nonworkday",
                           "nonholiday", "new_moon", "first_quarter",
                           "full_moon", or "last_quarter"

          <ordinal>        := any ordinal number ("1st","2nd", etc.),
                           "first" ... "fifth", "last", "odd",
                           "even", or "all"

          <prep>           := "before", "preceding",
                           "after", "following",
                           "on_or_before" ("oob"),
                           "on_or_after" ("ooa"),
                           "nearest", "nearest_before", or
                           "nearest_after"

          <holiday>        := "Christmas", "Thanksgiving", etc.

          <sep>            := one or more non-numeric, non-space,
                           non-`*' characters

          <month>          := a numeric month (1-12)

          <day>            := day of month (1-31)

          <year>           := a numeric year

    If the -A option (American date formats, the default) is given:

          <date_spec>      := <month_name> <day> |
                              <month><sep><day>{<sep><year>}

    If the -E option (European date formats) is given:

          <date_spec>      := <day> <month_name> | <day> <month>
                           | <day><sep><month>{<sep><year>}

    Pcal also allows format specifiers in both the text and foot strings
 (see the -L, -C, -R, and -N options below); each will be replaced by a
 corresponding string as outlined in the table below.  Most of these are
 derived from the ANSI C strftime() function; the %[louwMD] and %[o0+-]
 format specifiers are specific to pcal:

          %a   abbreviated weekday
          %A   full weekday
          %b   abbreviated month name
          %B   full month name
          %d   day of month (1-31)
          %j   day of year (1-366)
          %l   days left in year (0-365)
          %m   month (1-12)
          %U   week number (0-53)
          %W   week number (0-53)
          %u   week number (1-54)
          %w   week number (1-54)
          %y   year w/o century (00-99)
          %Y   year w/century
          %%   `%' character
          %o   print number as ordinal
          %0   print number with leading zeroes
          %+   use following month or year
          %-   use previous month or year
          %{+N}[DWMY]    adjust date by +N days/weeks/months/years
          %{-N}[DWMY]    adjust date by -N days/weeks/months/years

    The %u specifier considers the week containing 1/1 as week 1 and the
 following logical Sunday (the first day of the week as printed; cf. the
 -F option below) as the start of week 2;  %U considers the first logical
 Sunday as the first day of week 1. %w and %W behave like %u and %U
 respectively, but use the first logical Monday instead.  Note that %w
 has a different meaning to strftime().

    The %o format specifier prints a number as an ordinal, with the
 appropriate suffix ("st", "nd", "rd", or "th" in English) appended.  For
 example, %od prints the day of the month as "1st", "2nd", "3rd", etc.

    Unlike strftime(), pcal defaults to printing numbers (except %y)
 without leading zeroes.  If leading zeroes are desired, the `0' prefix
 may be used.  For example, %0j prints the first day of year as "001".

    The %+ and %-rmat specifiers direct pcal to substitute the
 following/previous month/year in the following [bBmyY] specifier.  For
 example, %+B prints the name of the next month.

    The %{[+-]N}[DWMY] format specifiers do not print anything, but
 instead adjust the working date by +N days (D), weeks (W), months (M),
 or years (Y).  Subsequent format specifiers use the adjusted date
 instead of the current date.  For example, %+1M %B %Y adjusts the date
 forward by one month and then prints the resulting month and year
 ("January 1992" in December, 1991); %-2W %b %d adjusts the date back-
 ward by two weeks and prints the resulting month and day ("Jul 26" on
 August 9).

    Such date adjustments are normally cumulative; for example, %+1Y%-1D
 adjusts the date forward by one year and then backward by one day.  If
 %D or %M is specified alone (or if N is zero), pcal restores the
 original date.  Note that %M has a different meaning to the strftime()
 function.

    The "Notes" box (see below) uses the first of the current month as
 the default date.  All foot strings use the first of the current month
 in single-month mode and the first of the starting month in whole-year
 mode.

3 Examples

          last Monday in May*         Memorial Day Holiday

          all Fridays in Oct          Status Meeting, 11 AM
          first workday in all        %-B progress report due
          all Fri in all              \fBTime card due,\fP 3 PM
          all Monday in all           Fiscal week %0W
          -2nd workday in all         Schedule for %+B due %+2D
          2nd full_moon in all        Blue Moon
          Fri on_or_before all 15     Pay Day
          even Fridays in year        Pay Day
          183rd day of year           Mid-year (%l days left)

          Tue after first Mon in Nov  Election Day (USA)

          4th Thu in Nov*             Thanksgiving
          Fri after 4th Thu in Nov*   Day after Thanksgiving
          workday nearest 12/25*      Holiday

          12/25/93*                   Christmas     # American
          25.12.93*                   Christmas     # European
          25. 12.*                    Christmas     # European

          Dec 25*                     Christmas     # American
          25 Dec*                     Christmas     # European
          25. Dec*                    Christmas     # European

    Any non-numeric character may separate numeric dates.  Holidays may
 be flagged by following the date immediately with `*' as in the examples
 above; this will cause the date to be printed in gray.  "Each" and
 "every" are accepted as synonyms for "all", and any word may be used in
 place of "in".  The abbreviations "oob" and "ooa" may be used in place
 of the keywords "on_or_before" and "on_or_after", respectively.
 "Nearest" attempts to match the specified date; if that fails, it tries
 the day after, then the day before, then two days after, two days
 before, and so forth until a match occurs.

    Wildcard day names are also provided.  The keyword "weekday" applies
 to any days which are normally printed in "logical black" - the
 predominant day color - on the calendar.  The keyword "workday" is the
 same, but does not include any holidays.  The keyword "holiday" includes
 only those days flagged as holidays.  The keywords "nonweek- day",
 "nonworkday", and "nonholiday" are also recognized as negations of the
 above.  See the CAVEATS below for important notes on using these
 keywords.  Moon phases may also appear as wildcards; "nm" is accepted as
 a synonym for "new_moon", "1q" and "fq" for "first_quarter", "fm" for
 "full_moon", "3q" for "third_quarter", and "lq" for "last_quarter".

    Ordinal day numbers may be used to specify dates, either relative to
 the month or to the year.  Either words or numeric abbreviations may be
 used for "first" through "fifth"; higher numbers must be given using the
 numeric equivalent (e.g. 100th).  Negative ordinal numbers may even be
 used.  For example, "-2nd" means "next to last".

    "Odd" and "even" do not refer to the actual date;  instead, "odd"
 means "alternate, starting with the first", and "even" means "alternate,
 starting with the second".  Thus, "odd Fridays in March" refers to the
 first, third, and (if present) fifth Fridays in March - not to those
 Fridays falling on odd dates.

    "All" refers to each individual month; "year" refers to the year as
 an entity.  Thus "odd Fridays in all" refers to the first, third, and
 fifth Friday of each month, while "odd Fridays in year" refers to the
 first Friday of January and every other Friday thereafter.

    "Nearest", "nearest_before", and "nearest_after" refer to the nearest
 weekday or wildcard day with respect to the specified date.
 "Nearest_before" and "nearest_after" allow the user to specify how pcal
 is to disambiguate between two dates that are equally near: e.g.,
 "nonweekday nearest_before [Wed.] 9/25/96" refers to Sunday, 9/22 while
 "nonweekday nearest_after 9/25/96" refers to Saturday, 9/28.  (Note that
 "nearest_before" and "nearest_after" are equivalent to "nearest" when no
 such ambiguity exists:  e.g., "nonweekday nearest_before [Thu.] 9/26/96"
 refers to Saturday, 9/28.)

    Text in the date file may use C-like escape sequences (i.e.  a `\'
 followed by a character, 1 - 3 octal digits, or `x' followed by 1 - 2
 hexadecimal digits).  Escaped whitespace (including newline ) and the
 standard ANSI character escapes (`\a', `\b', `\f', `\n', `\r', `\t',
 `\v') are all replaced by a single blank.

    The HTML special characters `&lt;' `&gt;' `&quot;' `&amp;' `&nbsp;'
 and `&#NNN;' (NNN = any three decimal digits) are also supported.  These
 will be propagated intact (be sure to escape the `#' in `&#NNN;') if the
 output is specified as HTML (see the flag); otherwise they will be
 converted to equivalents.  This allows a common date file to be used
 regardless of whether the desired output format is HTML, PostScript, or
 Un*x calendar(1) (see the -flag) input.

    Lines in the .calendar file consisting of year #### (where #### is a
 numeric year) can be used to set the year for following entries.  This
 assumes that the following entries do not contain a year; any date
 entries containing year information will set the remembered year to that
 year.

    Lines in the .calendar file consisting of year all (or,
 alternatively, year *) direct pcal to wildcard following entries against
 every applicable year.  This assumes that the following entries do not
 contain a year; any date entries containing year information (or an
 explicit year XXXX entry) will set the remembered year to that year.

    Lines in the .calendar file consisting of opt <options> can be used
 to override the defaults for any command-line options except -c, -e, -f,
 -h, -H, -u, -v, -D, and -U.  Any options specified in this manner are,
 in turn, overridden by those specified explicitly on the command line.

    Lines in the .calendar file consisting of note{/<number>} <month> can
 be used to place notes regarding the entire month in one of the unused
 blocks of the calendar.  The <month> indicator may be either a number 1
 through 12 or an alphabetic month name as described above;  "note all"
 will place the associated text in the notes block for each month in the
 current year.  <number> is an optional positive or negative number
 specifying the empty box where the associated text is to be placed.  If
 positive, pcal counts forward from the first empty box; if negative,
 pcal counts backward from the last empty box.  Thus, "note/1" places the
 associated text in the first empty box; note/-3 in the third- to-last.
 The default is -1 if no <number> is given (last empty box, immediately
 preceding the small calendars on the bottom row; cf.  -S, -k, and -K,
 below).

    Comments are supported in the .calendar file.  Any characters
 following a `#' character through the end of the line are ignored
 (unless the `#' character is escaped by `\').

    Pcal supports rudimentary cpp-like functionality in the date file,
 allowing the following constructs:  define | undef, if{{n}def} ... {elif
 ...}* {else ...} and inc that these are not preceded by `#' as they are
 in C.  Symbol names defined using these keywords (or via the -D option)
 are case-insensitive.  It is not an error to undef an undefined symbol,
 nor to define a previously-defined one.  An ifdef alone is always false;
 an ifndef alone is always true.  if is accepted as a synonym for ifdef.

    The name of the file in the include directive may optionally be
 surrounded by either "" or <>, both of which are ignored.  If the name
 is not an absolute path, it is taken to be relative to the directory
 where the file containing the directive is located.  If the string "%y"
 appears in the file name, it is replaced by the last two digits of the
 current year or, if "year all" is in effect, is expanded to all
 applicable years.  Pcal is smart enough to translate ~/ to the user's
 home directory.

    pcal normally terminates immediately if the file specified in an
 include directive does not exist.  An alternate form of the directive,
 include?, directs pcal to continue silently if the file does not exist
 or cannot be opened.

    In addition to pre-processing keywords, pcal also accepts boolean
 expressions in if{{n}def} and elif directives.  These expressions
 consist of symbol names joined by the boolean operators !, &, ^, and |,
 in order of precedence, high to low.  Parentheses may be used to alter
 the precedence.  The synonyms && and || are accepted for & and |.  A
 symbol name evaluates to true if currently defined, false if not; thus:

          ifdef A | B | C

    ...is true if any of the symbols A, B, and C is defined, and:

          ifdef A & B & C

    ...is true if they all are.  Note that ifndef <expr> is equivalent to
 ifdef !( <expr> ).

2 Moon_File
 
 The Moon file is not obsolete and will not be supported in the future.
 
    If a file of the name .moon## (moon##.dat under MS-DOS), where ## is
 the last two digits of the calendar year, exists in the same directory
 as the date file (or in the directory where pcal resides), pcal uses the
 information contained within to calculate the phase of the moon.  If a)
 no such file exists, b) the -e flag (do not use a date file) is
 specified, or c) the -z flag (specify time zone) is specified, then pcal
 uses an algorithm to calculate the phase of the moon.

    Entries in the moon file must conform to the following syntax:

    If the -A option (American date formats, the default) is given:

          <quarter> <month><sep><day> {<hour><sep><min>}

    If the -E option (European date formats) is given:

          <quarter> <day><sep><month> {<hour><sep><min>}

    Where:

          <quarter> := "nm", "fq" or "1q", "fm", "3q" or "lq"
                         (new moon, first quarter, full moon, last quarter)
          <hour>    := number 0-23 (24-hour clock)
          <min>     := number 0-59

    This file must contain entries for all quarter moons in the year, in
 chronological order; if any errors are encountered, pcal will revert to
 using its default algorithm.

    As in the date file, comments start with `#' and run through the end
 of the given line.

    The moon file may optionally contain an opt -A or opt -E line to
 specify the format of its own date entries independently of the format
 used in the date file.  No other flags are legal in the moon file.

2 Caveats

    The "workday" and "holiday" keywords are aware of only those holidays
 which have already been flagged at the point where they appear.  For
 example, consider January 1990:

                        January 1990
                     S  M Tu  W Th  F  S
                        1  2  3  4  5  6
                     7  8  9 10 11 12 13
                    14 15 16 17 18 19 20
                    21 22 23 24 25 26 27
                    28 29 30 31

    If the .calendar file looked like this:

          workday on_or_before all 15   payday
          3rd Mon in Jan*               MLK day

    ... then pcal would mark the 15th as "payday" since at that point in
 the .calendar file it has no way of knowing that January 15th will later
 be flagged as a holiday.  If the two lines were reversed, such that the
 holiday preceded the "workday" wildcard, then pcal would work as
 intended, marking instead the 12th as "payday".  Also, beware of year
 boundaries which affect the handling of all of the day wildcard
 keywords.  In general, it is best to place monthly wildcards such as the
 example above at the end of each year to achieve the desired effect.

    Only the positive ordinals may be used in conjunction with
 prepositions (e.g., "fourth Sunday before 12/25").  (It could be argued
 that "last Sunday before 12/25" should be accepted as a synonym for
 "first Sunday before 12/25", but then what does "last Sunday after
 12/25" mean?)

    When the -w and -p options are used together, pcal revises the
 y-scale factor in order to use the entire portrait page;  therefore, the
 user should avoid using use the -y option when using both the -w and -p
 options.  Use of the -w option in any case effectively disables the -m,
 -M, -j, and -J options.

    The output of the -c option may be used as input to subsequent runs
 of pcal.  Note, however, that opt lines (except for an automatic opt
 -[A|E]), comments, "note" text, and ifdef'd-out source will be lost.

    The -S option interacts with note{/<number>}; if used, it should be
 specified either on the command line or prior to the first note line in
 the date file.

2 Authors

    The original PostScript code to generate the calendars was written by
 Patrick Wood (Copyright (c) 1987 by Patrick Wood of Pipeline Associates,
 Inc.), and authorized for modification and redistribution.  The calendar
 file inclusion code was originally written in "bs(1)" by Bill Vogel of
 AT&T.  Patrick's original PostScript was modified and enhanced several
 times by King Ables, Tim Tessin, Joe Wood, Jeff Mogul, Mark Hanson, and
 others whose names have regrettably been lost.  This C version was
 originally created by Ken Keirnan of Pacific Bell;  additional
 enhancements by Joseph P. Larson, Ed Hand, Andrew Rogers, Mark
 Kantrowitz, Joe Brownlee, Andy Fyfe, Steve Grandi, and Geoff Kuenning.
 The moon routines were originally written by Jef Poskanzer and Craig
 Leres, and were incorporated into Pcal by Richard Dyson.  International
 language support was added by Angelo Haritsis (except Esperanto, by
 Andrew Rogers).

2 Reference_Card

    A Handy, alphabetical listing of all the pcal switches.

 -A parse American date format          -a select language for months/days
 -B don't fill unused boxes             -b print day in black
 -C define center foot string           -c generate "calendar" utility input
 -D define preprocessor symbol          -d select alternate day font
 -E parse European date format          -e print empty calendar
 -F define alternate starting day       -f select alternate date file
 -G print day as gray-filled outline    -g print day in gray
 -H generate calendar as HTML table     -h generate full help message
 -I re-initialize program defaults      -i <unused>
 -J print Julian day and days left      -j print Julian day (day of year)
 -K prev in first box, next in last     -k prev/next in first two boxes
 -L define left foot string             -l landscape mode
 -M print all moons                     -m print new/half/full moons
 -N define heading for notes box        -n select alternate notes font
 -O print day as empty outline          -o select alternate output file
 -P <unused>                            -p portrait mode
 -Q <unused>                            -q <unused>
 -R define right foot string            -r remap fonts for 8-bit characters
 -S suppress prev/next calendars        -s define date/fill box shading
 -T select typeface for date/note text  -t select alternate title font
 -U undefine preprocessor symbol        -u generate parameter usage message
 -V <unused>                            -v generate version ID
 -W <unused>                            -w print whole year per page
 -X X-axis transformation               -x X-axis scale factor
 -Y Y-axis transformation               -y Y-axis scale factor
 -Z generate debugging information      -z specify alternate time zone
 -# print multiple copies of each page 
