ps-anc 8 to 9, interim version change log
 8.86, 4 Jul 2004
   o added an explicit option for using the character encoding specified
     in whatever font is chosen.
   o added another date display option:  full date + first three PLAC items
   o added some more ISO paper size choices
   o fixed a bug where when the 2nd name was displayed, it wasn't accounted
     for in the height of the person's information
   o renamed function: ps_xlat to strxlat, since it is not specifically
     designed for PostScript string protection  -- that logic is contained
     in the table of character translations provided to it
   o Thanks to Patrick Texier for pointing out that when font choices for 
     different elements of charts was further split by adding separate
     variables for 'titlefontname', 'ifontname', and 'boldifontname' --
     and properly handled them in the right-left/left-right logic -- that I
     had forgotten to include them in the font reencoding logic.
   o Thanks to Jonathan Sailor for pointing out that there was a problem with
     the complimentary inclusion of the database key for individuals in the
     output.  The Cousins chart forces the display of grandparents who might
     not exist in the database -- keys are not available for non-existant
     individuals.

 8.85, 13 Nov 2003
   o Split the determination of font metrics for the name-font and info-font.
   o Added a variable to the PostScript output that allows tweaking of the
     vertical position of the chart relative to the page or border.
     This can also be used to nudge a name above or below a page break.
   o Fixed PostScript procedure 'wlen' so it can be informed as to whether
     the name-font or info-font should be used to measure the length of 
     a string as it will print.

 8.84, internal version
   o Added Jim Van Zandt's code to enable different fonts for names vs. info.
   o Added printing of 2nd names as info.
   o Added support for Arabic and Hebrew fonts plus right-to-left character
     placement for all characters in specific fonts.
 8.83, 23 May 2003
   o Fixed a positioning dilema in combo. charts.  Resulted in the addition
     of a procedure to implement vertical adjustment of an ancestor branch
     to bring it closer to the first descendant of that ancestor. (26-Mar-2003)
   o Added option to remove parenthesized text from names (can help to
     increase the likelihood that important parts of names, outside parentheses,
     don't get chopped due to the length restriction.
   o Added patrilinear/matrilinear/all option for drop line chart.
     Default is all.
   o In the comments, made the list of questions more like a table of contents
     with all-capital section names that may be used to jump via text search
     to the corresponding point in the code.  Search for LAYOUT for an example.
 8.82, 31 Oct 2002
   o Added an option to reencode fonts to match ISO Latin 2.
   o Added an option to make safe special characters in PostScript strings
     (enabled by default).  This applies to virtually all strings in the
     PostScript output.
   o PostScript: added the ability to deal with a font that has no FontBBox.
     Hershey-Gothic-English is such a font.  When the values in the FontBBox
     (corners of a box that could contain any character) are zero,
     the maximum descent and ascent are estimated from a "A" and "p".
 8.81, 9 Oct 2002
   o Made the Combo chart a one-pass operation.  Done with the addition of
     a new proceudure: multi_branch_adjust()
   o Moved three instances of code that generates a chart title string into
     one function.
     Added a user option to override automatic title generation with a user-
     specified title.
 8.80, 26 Sep 2002
   o enabled place name abreviating to apply within ADDResses
     rather than just PLACes.
   o added external file conversion commands.  They are selected via a
     list presented after the PostScript file is written.  Look for them
     just after the write_file procedure call at the end of the 'main' routine.
     These should be edited by the user if they are to be used.
   o fixed a problem in the cousins chart where the first parent could overlap
     his/her other-marriage line and make some half siblings appear to be
     direct descendants.
   o added the ability to distinguish among different pedigree tags on FAMC
     links, and request a choice when there are more than one, as when a
     person's adoptive and birth parents are both documented.
     This follows GEDCOM 5.5 support for non-birth lineage.
     The variable 'opt_rel_famc' controls whether non-birth branches are shown
     with a thin blue line to indicate they are not blood relatives of the root
     of a chart.
 8zt-1 (79-1), 16 Jul 2002
   o implemented Paul Buckley's idea for chart type selection via list with
     descriptions
   o fixed branch_down problem caused when the parent generation
     isn't shown (when the cousins chart is restricted to 1 anc. generation)
   o fixed undefined variable (prev_pos) in the combo chart routine
 8zt (79), 11 Jul 2002
   o added an option to use Paul Buckley's shorten function that allows
     abbreviations to be substituted for place components that match
     items in a user-editable table.  It is necessary to enable place
     modification in a user question, uncomment an
     include statement and choose a date-place style that can use the
     place modification.
   o made ancestor branches go where they are asked, even if they have
     half sibling ancestor 'side branches' -- so this feature may now
     be included with combo and cousins charts
   o made it possible to set number of descendant generations in the cousins
     chart to 1 (no children of main family are to be shown) and the number
     of ancestor generations to 1
   o ancestor chart: fixed bug that could cause small spacing problems
     when there were no siblings of an individual.
   o fixed ancestor function so that half sibling ancestors and paternal
     ancestor branches will go as high as they can.  This eliminates some
     cases of wasted space and makes it so that half sibling branches may be
     included in combo and cousins charts.
   o made it possible for ancestor branches to extend above zero vertical
     position in chart coordinates (necessary when later sub-branches reach
     around and above those already placed).
   o fixed extraction of ADDRess or RESIdence information from individuals.
     ADDR, PHON, EMAI, WWW by themselves are for current addresses.
     (standard GEDCOM tags, but use as individual attributes is non-standard)
     When wrapped in a RESI node, they are only records of where someone once
     resided.
 8zs-3 (78), 30 Nov 2001
   o found some variables that weren't being initialized, thanks to the
     LL report language command: option("explicitvars")
   o do_des2:  for branching up, added a check as to whether there are any
     other branches in the way (ceiling).  If not, then it's ok to allow
     branch_adjust to move the branch up the page, possibly making some
     positions negative.  Negative positions are now handled by minpos_text
     and minpos_line variables in the PostScript file.
 8zr (77), 29 Oct 2001
   o split high_pos_all into high_pos_text and high_pos_line for future use
     to more accurately position chart within its borders.
   o in PostScript, added minpos_text and minpos_line parameters and
     split maxpos into maxpos_text and maxpos_line.  Currently, only
     minpos_text and maxpos_text are being used to fit the chart into its
     vertical space.
   o these changes have enabled the cousins chart to safely be shifted down to
     allow room for an up-descendant branch.  In the case that this
     assumption is false (due to collision with an other descendant branch) and
     the whole chart is shifted down, the catching of the minimum of any chart
     elements enables the closing of any empty space at the top of the chart.
   - still there needs to be some way for the up-branches to go above the
     current zero-top boundary of the chart, so that branch collisions might
     be positively identified and not mistaken for chart-top collision
     (Maybe just in do_des2 and branch_up and branch_down, check for branch
     going into two unused generations, and hence there being no possibility of
     a branch collision -- only empty space to adjust-up into.
 8zq (76), 6 July 2001
   o cousins: Fixed a 2nd parent's 2nd parent positioning problem that could
     cause 2nd parent's siblings to get spaced out unnecessarily.  The problem
     happened due to an attempt at code minimalism -- oops.
   o cousins: Fixed a problem with 1st parent's half sib branch.  Now it is
     made to squeeze up against the 1st parent.  However, if 1st child
     up-branching bumps into cousins or half sibling descendants, then the
     whole chart may slip down the page.
     The cause is known, the fix is pending.
 8zp (75), 3 July 2001
   o cousins: fixed a problem with spacing caused by 1st parent's
     1st parent trying to avoid children by other marriages as if they
     were part of another branch.
   o cousins: added restriction that spacers must be non-negative (necessary
     after removing the sibling span as an influence on the "relative spacing"
     of their parents
 8zo (74), 30 June 2001
   o Made margins work for Adaptive and EPSF page-size types.
   o Fixed cousins chart problem of 1st parent's 2nd parent slipping down the
     page.
   o Simplified some do_anc(..) code.
   o Simplified (cleaned-up) do_cousins() code.  Found a bug in 1st pass that
     caused space not to be allocated for maternal grandfather's other families
     when paternal grandfather had no other families. (used dpar1 when should
     have used mpar1 in a conditional)
 8zn (73), 18 June 2001
   o Fixed a problem of new half sibling branches with desc. of children not
     shown (used cousins chart) not claiming space in their children's
     generation.  This would somtimes result in a collision with individuals
     in the same generation.
   o In PostScript output, made all lines of person info show in the same
     font size by using for all info lines the smallest scale factor necessary
     to make longest line fit.
   o In PostScript output, made some minor coding changes, variable renaming,
     comment additions and moved more settings into the user-modifiable area.
 8zm (72), 15 June 2001
   o Fixed cousins chart routine so that it has no problems with main
     parents that are without parents.
   o Added example code to show how to use a 'secret' chart type, #5,
     to place multiple ancestor and descendant charts in the same layout.
     Look for it in "proc main()" with comments.  A major workaround will
     be necessary to enable this to include combo or cousins charts, due to
     their 'two pass' nature.
   o Added duplicate handling to combo, do_des2, branch_up, and branch_down.
     Made better by only allowing truncation of a descendant's branch if all
     of his/her marriages are duplicates too.
   o Added incomplete duplicate handling to cousins chart.
   o Removed the old do_des routine.
 8zl (71), 13 June 2001
   o Made initial direction of descendant branches in cousins chart be UP
     for 1st parent's siblings, and DOWN for 2nd parent's siblings.
   o Fixed the positioning of the first grandparent on the cousins chart when
     his/her first child's up-branch determines distance from top of chart.
     A gap at the top of the chart was happening in that case.
   o Fixed a problem with positioning of 2nd parent half sibling branches in
     ancestor branches.  Still needs to be made more like new branch_up/down.
 8zk (70), 12 June 2001
   o Added user control of descendant branch directions.
   o Revised do_combo() in light of the branch_up possibility.
   o Redid the positioning for a main parent in a down descendant branch that
     fixes a few issues, most noticeable was that the top parent wasn't closing
     in on the first child's branch.
 8zj (69), 7 June 2001
   o Fixed a bug in ancestor chart caused by the mistaken assumption that
     branch_adjustment was taking care of closing a gap when paternal
     half sibling branches were happening.  Determination of 'gapshrink' now
     includes that case too, but can't work for the whole branch when
     half sib. ancestors are shown.
     - Streamlined the determination of min_gap in do_anc(..) in the process.
   o Replaced use of no_parent_extra with corner_height.
   o Added min_sibling_spacer (renamed from min_sibling_gap) between siblings
     in half sibling branches in ancestor charts.
   o Added a user option to control the thickness of bold lines.
     A factor of 3 should make bold lines stand out better on reduced charts
     or charts converted to images (GIF, JPG, ...).
 8zi (68), 4 June 2001
   o Up-branching in descendant chart is back.
     Built a new do_des2 routine that uses the branch_up and branch_down
     routines.
   o Switched do_combo() so it uses the new do_des2() with up and down
     branching.
   o Fixed branch_up and branch_down so they don't try to show children
     when at minimum depth (leaving experimental phase).
   o Added a variable, debug_postscript, that is currently used to add code
     to the output that causes the printing of the vertical position of people
     to be printed.  1.00 is the unit, equal to the maximum name height.
     This will not be made a full user option.  One has to edit this file to
     turn it off or on and edit the 'show_positions' variable near top of PS.
   o Added a new, small function: half(x).  It returns the integer part of x/2.
 8zh (67), << 1 June 2001 >> internal version
   o Equipped dropline() with branch adjustment capability in order to
     eliminate the min_pos parameter which was keeping all generations
     below an individual from going higher on the chart than that
     individual could go.  This eliminates wasted vertical space which allows
     allows the information fonts to be larger.
   o Added half siblings to cousins-chart and combo-chart main families.
     This was done via two new routines, branch_up and branch_down.
     Some restrictions had to be modified in the user interaction since
     with half sibling descendants a possibility now, the combo chart can be
     done even if the parents have no ancestors and no kids by
     the main marriage.
     - These routines may soon replace most of the descendant routine's code.
   o Modified the enqueue_vertical and enqueue_person procedures and the
     corresponding 'l' and 'i' procedures in the PostScript so that they use
     the relationship parameter in the same way: 0 for no relation, 1 for
     indirect blood relation, and 2 for direct relation.  Simply dividing
     by 2 is how we can change the relationship when chart
     flow changes direction.
   o Changed the half sibling vertical line in ancestor charts
     to dark blue and thin.  This more closely resembles the descendant
     chart appearance and makes any path along lines from the main target of
     a chart such that the relationship
     (indicated by line-type: color and bolding) never increases, but stays
     the same or decreases.
 8zg (66), 29 May 2001
   o Made do_anc(..) and do_des(..) into functions, returning the vertical
     position that their main person is placed at.  This allows us to do away
     with the old global list, do_anc_stack.  It also eliminates the two step
     process of getting the position of an anc or des person into a variable.
     Some comments may still need updating.
   o replaced the use of name_height with corner_height, where it was being
     used to specify the distance between a parent and an extreme child.
     This will allow for a bit more detailed control of chart appearance.
   o Made the order of doing ancestors and descendants in do_cousins the same
     in the first pass as in the second.
   o Did away with the global variable committing_data and instead created
     a new function, initialize_data() for clearing out the lists of
     person data, line data, originality, and high positions in generations.
     To be used at the end of a first pass in do_combo and do_cousins.
     It may also be used by main(), to declare most lists.
     The branch_adjust procedure was expecting chart data to be present
     even on the first pass.  The absence of data was causing an error
     in pvalue.c of LifeLines.
 8zf (65), 28 May 2001
   o added two options for controlling the use of address information.
   o made ADDR-type addresses show with a '* ' prefix and
     RESI-type or ADDL-type addresses show with a '! ' prefix.
   o changed the order of person details as written to the PostScript file
     to make debugging positioning problems easier by making the information
     more readable, putting the more fixed-length parameters first. 
 8ze (64), 24 May 2001
   o do_anc: fixed a bug that was misaligning upward half sibling branch
     when half sibling ancestors were shown and a branch adjustment happened
   o added calc_high_pos_all() function to replace bookkeeping with global
     variable, high_pos_all.  Now 'high_pos_all' is simply figured during
     the writing of the PostScript file.
   o added procedure cloak() and function not_cloaked() to enable "temporary
     ignorance" of high_pos in a neighboring generation.  This is necessary
     when doing maternal ancestor branches in the cousins chart to prevent
     such a branch from starting below the position of the last spouse of
     her last child.  It can also be used to keep the grandfathers' branches
     from interfering with the placement of their children's descendant
     branches.  This will allow the get_clearance() function to be used
     in do_des().
     Basically, there are times when an anc. or des. branch needs to avoid
     collisions in all neighboring generations, and there are other times
     when the contents of a neighboring generation should be ignored.
   o simplified the use of the branch_adjust procedure.  It's more ready
     to be used for upward branching in do_des.
 8zd (63), 21 May 2001
   o modified person_height() function so that it handles marriage date logic
     using two extra parameters
   o made updating of high_pos_gen array and high_pos_all variable
     into a procedure
   o made is_prefix_title() into a function, eliminating a global variable
     previously used to return the result
   in do_anc:
   o did a mild code cleanup
     - eliminated use of key(fam) in favor of directly comparing
       family variables in conditionals
     - made use of nfamilies(0)=0 to simplify some conditionals
   o fixed potential bug where a cutoff individual would have had their
     maternal half siblings shown
   o enabled handling of a missing person (0) as a person with no ancestors,
     no information, and a blank name (space characters)
     The result is a stub to mark where a missing parent would go.  This makes
     for a more uniform presentation of families and enables combo and
     cousins charts to not have to worry about missing parents.
   o moved code to two new procedures.  This is the code that
     was handling the adjustment of the position of a branch to move it into
     unclaimed space when older siblings' positions are being stretched.
 8zc (62), 5 May 2001
   o Made spacing after descendants' spouses the same as that after
     descendants with no spouses.
   o Tweaked some comments.
 8zb (61), 3 May 2001
   o introduced a new chart type:  drop line
     It just shows the direct descendants of the initial person.
     The drop line style was occasionally showing up in descendant charts when
     there were missing spouses.  It was also probably placed there in case
     one was willing to split off a GEDCOM of just descendants in order
     to produce such a chart.  Now that is not necessary, as there is a chart
     type specifically for this.  That feature has been eliminated from the
     full descendant chart procedure.
     That behaviour in the old descendant chart procedure was causing trouble
     for the combo and cousins charts, as well as leading to the quandary of
     how to show a person who had children from two marriages but was
     missing a spouse in only one of them.
   o Turned the dateplace procedure into a function.
   o Made enqueue_person procedure capable of handling a missing person (0).
     This allows stubs to be shown for missing spouses in descendant charts.
   o added person_height2() function -- simplifies figuring of height
     when a marriage date is to be included.  Haven't yet replaced the older
     version throughout.
   o moved code into get_clearance() function to simplify the avoidance
     of individuals already placed on a chart.
 8za (60), 27 April 2001
   o Cousin chart: added compensation for descendant branches not honoring
     their designated position on the page.  This is known to happen when a
     family has only one spouse (so the parent gets centered beside the
     children) and the result is a drop-line appearance.
   o Modified the enqueue_person() procedure so that it will still allow
     duplicates to be blocked, even when in non-committing mode.  Non-committing
     mode is used to get the necessary spacing between branches in combo and
     cousins charts.  A problem was noticed when a sibling of the 2nd parent
     had her descendants truncated but space was left for them.
 8z9 (59), 25 April 2001
   o Fixed a spacing problem in cousins chart.  Children of the main family
     were slipping down the page.
 8z8 (58), 23 April 2001
   o Fixed a spacing problem in cousins chart.  Mother's mother should now
     be as close to last maternal sibling as mother's father is to the mother,
     in vertical position.
 8z7 (57), 22 April 2001
   o Made address printing optional.  Still not GEDCOM compliant in
     the expected format of address information though.
   o Modification to descendant chart was capable of referencing non-existent
     generations when trying to avoid collisions with younger generations.
     This has been fixed.  Oops!
 8z6 (56), 6 April 2001
   o Changed the person_height procedure into a function.  This caught two
     problems where the procedure's global variable for person height was
     being used but the procedure had not been called, in the do_des() proc.
   o Fixed a minor glitch in PostScript Level 1 manual feed AND in the
     new residence() function.
 8z5 (55), 4 April 2001
   o Implemented the printing of (last) address.  Additionally, streamlined the
     person printing procedure in the PostScript output -- it accepts any
     number of lines of information to print under a person.
   o Added a question about what PostScript Level to assume when specifying
     the manual feed option.
   o Added burial place (& date) to information on people.
   o Changed the PostScript comment, ViewingOrientation, for landscape layouts.
     This because Acrobat was turning them upside down.  Oops.
 8z3 (54), 31 March 2001 (Hey, I beat the 1 April deadline!)
   o First cut at the cousins chart is working.  Handling of parent with no
     siblings accomplished.
   o Found from a reputable source that it is not possible to alter the side-
     by-side layout of PDF documents (first page goes on right side).  So the
     only way to make a 2-page wide chart appear naturally in a PDF viewer
     would be to put a blank page at the beginning.  I don't want to do that
     since that would lead to a struggle to prevent the blank page
     from printing.
 8z2 (53), in the process of implementing get/set _high_pos_gen proxy's;
      done working on do_cousins()
 8z1 (52),
   o moved 'combo' chart generation into its own procedure, do_combo()
   o started work on do_cousins()
 8z (51), 24 Jan 2001
   o introduced TRUE/FALSE globals to serve as constants, especially for
     the interrogate_user function
   o cleaned up the main procedure in the way it calls the different chart
     generating procedures
 8y9 (50), 25 Nov 2000
   o fixed a problem where a person married twice with kids only by the
     second marriage would have the first kid placed at the same vertical
     position as the first husband (maybe an oops).
 8y8 (49), 19 Nov 2000
   o fixed problem with clipping chart at user-imposed margins.  Once again
     when multi-page layout is used, there will be no duplicated portions
     of the chart on separate pages.
     The problem was in forgetting that a clipping path must
     be specified before the drawing-to-be-clipped happens.
 8y7 (48), 22 Sep 2000
   o made print_thousandths procedure into a function which returns a string
 8y6 (47), 19 Jul 2000
   o Essentially start paternal half sib. branches at dad_min_pos.  If this
     leaves space unused above the branch, then the slack is now included
     in the space reclamation.  This allows paternal half sib. branches to
     'cling' to the father's branch.
   o Fixed problem of paternal half sib. branches overlapping branch above
     when their father was not shown.  Oops!
   o Fixed problem of overlapping caused by pos variable being modified by
     paternal half sib. placement.  pos variable was then possibly altered
     affect on high_pos and high_pos_gen for that set of siblings.  Oops!
 8y5 (46), 27 Jun 2000
   o !! fixed problem of ancestral branches not using gap above 1st parent's
     branch to allow for spacing out of older siblings.  This helps avoid
     having to move a person down the page, which stretches out the chart,
     making it more likely that names will have to be shrunk to fit vertically.
 8y4 (45), 22 Jun 2000
   o fixed problems with maternal half-sibling branches in highest generation,
     made them appear more like paternal half-sibling branches
 8y3 (44), 20 Jun 2000
   o Fixed 'Adaptive' paper type by not using paper_height and paper_width
     or margin variables in that case. This is intended to be a chart that
     can be printed to any size paper that a printer has as its default.
     Margin settings and manual feed control have to be given up in this case.
 8y2 (43), 20 Jun 2000
   o Fixed combo. chart so that a descendant depth limit of 1 (or any depth
     limit with there being no children) produces a chart just
     showing a married couple joined by a vertical line and their
     ancestors.  It's no longer necessary to create a fictitious child to get
     an ancestor chart for a recently married couple!  I know I did that
     for my own wedding.  The old way would have a blank individual for the
     root wasting a generation on the chart.
 8y1 (42), 20 Jun 2000
   o Added Paul Buckley's font selection via 'menuchoose' function.
 8y (41), 16 Jun 2000
   o Set up questions for combination chart.
 8x9 (40), 14 Jun 2000
   o Turned off up-branches in desc chart since they do not place their root
     at min_pos when there is ample space for the branch.
   o Fixed some cases of down-branches in desc chart so that they do not
     unnecessarily place their root lower than min_pos.
   o Implemented combination chart, along with new chart type and other
     modifications in interrogate_user().  NOTE: it won't work right if one
     of the descendants on the chart has children but no spouse.  In those
     cases, the parent is placed farther down the page than min_pos in order
     to center the parent on his/her children, even if there were enough space
     for the children's branches to be placed higher on the chart (and the
     parent along with them).  This kind of behavior needs to be fixed, which
     won't be easy.
   o Updated the comments for interrogate_user() function.
 8x8 (39), 7 Jun 2000
   o Fixed EPSF.  Tested in a LaTeX document, using `psfig' to include a chart.
   o Figured out why sometimes an ancestor will be placed lower on the chart
     than was requested via min_pos argument, even if there is unused space
     for the father's branch to be moved up towards the top of the page.
     It can happen when the father has a lot of younger siblings.  The mother's
     branch then having to be moved down the page to stay clear of them.  Then
     when we center the individual (and siblings) between the mother and father,
     the fact that the mother came back with a greater position than her min
     position causes the individual to be moved down the page by some amount.
     There are two ways to fix this.  Plot the branches in a trial mode, noting
     any difference in min_pos and returned position of the ancestor.  Then
     do those ancestors with a compensating reduction in min_pos.
     OR -- Hand the PS file a data structure representing the family tree
     and let the PS file implement a kind of rubber space between the adjacent
     branches to try to make them 'magnetically' attract each other.  Lots of
     undefined methods involved here at this point.
 8x7 (38), 7 Jun 2000
   o Clarified the variable names and fixed a bug in the PS code that handles
     the positioning of characters relative to horizontal line ends.
   o Simplified some code in descendant procedure by setting a branch
     direction variable allowing just one call to do_des() where there had been
     three separate calls.
   o Accomplished a mixed chart -- ancestors of siblings, and sibling
     descendants, BUT only with much tweaking of descendant branch
     vertical positions.  More work is needed here.
   o Added duplicate checking of stepparent families in ancestor chart.
   o Added dashing of half-sib line if and only if all of the other
     stepmarriages of an ancestor are already indicated on the ancestor chart.
 8x6 (37), 23 May 2000
   o Enabled duplicate handling in descendant chart.
   o Simply added 'fam' to duplicate blocking list, similar to individuals,
     to make it easier (and more reliable) to dash a vertical line to
     indicate a duplicate family, not just because both parents are already
     on the chart).
 8x5 (36), 19 May 2000
   o Made generation numbers count down in descendant chart procedure.
     Now, the mirror chart feature doesn't have to be used to make ancestor
     and descendant charts have older generations on the same side.
 8x4 (35), 18 May 2000
   o Made generation numbers (depth or level) in LL and PS relative to an
     arbitrary starting generation number.
   o Made absolute reservations (for duplicate blocking) use depth of
     'start_depth'
 8x3 (34), 13 May 2000
   o Eliminated trailing space in title when there are no from-to years
     to append to root person's name.
   o Some clean up of do_des() procedure.  Attempt at major rearrangement
     deemed futile.
   o Eliminated a trial line of code with regard to right_margin that should
     not have been left. Oops.
   o Fixed reversal of behavior when 1 vs. many x-pages with regard to
     subtraction of border width (2x or 1x) from first page's width.  Oops.
 8x2 (33), 10 May 2000
   o Cleaned up the logic of did/didn't do mom/dad in do_anc procedure.
   o Fixed loss of dashes caused by '2 setlinecap' extending each dash, which,
     when dashes are small, can fill in the space between dashes.
 8x1 (32), 7 May 2000
   o Position of label inside/outside border is controlled in PS file.
   o 4-side page margin control added.  Thanks to Christopher Sawtell for
     initiating this change with book gutter space in mind.
   o Page size selection added, with printer media selection, too.
   o Manual feed control of printer added.
   o Let label procedure know how much width of lower left page is left,
     for accurate scaling and centering of label.
   o Made the name appearing in the title obey the surname upper-casing option.
 8x (31), 29 Apr 2000
   o Verified that the ISOLatin1 and IBM Extended Character Set encodings
     are working properly by checking every character after code 128.
     There should not be any conflicts again.
     Rewrote the encoding vector modifying procedure, making it simpler.
     What were being called encoding vectors in the program were really
     lookup arrays for making changes to a font's encoding vector.
   o Included the font for the chart label in the reencoding, if performed.
     Made chart label font name a constant defined at beginning of PS file.
 8w9 (30), 28 Apr 2000
   o Beginnings of a paper size option.  Currently only changes bounding box.
     This will be tied together with 4-sided margin control.
   o Separated ISO-Latin-1 encoding from partial IBM Extended Character Set
     encoding.  This is the rough draft stage of allowing an encoding option.
   o Implemented duplicate ancestor truncation for stepancestors.
 8w8 (29), 26 Apr 2000
   o Replaced anc/des tags with rel_up/rel_down specifying on which side
     an individual is connected (by horiz. line) to neighboring generations.
     This because both do_anc(..) and do_des(..) count up from the root person.
     Mirror_chart was taken over in the past to get around this, which made
     it not work to set /mirror to true in the PS file for a descendant chart.
   o Des. chart: descendant's 1st spouse was too close when branching down and
     no kids due to no extra space being inserted.
   o added guidelines for writing alternative PostScript border procedures.
     Look above '/printborder' to view the comments.
 8w7 (28), 25 Apr 2000
   o Based positioning of horizontal lines relative to text on the
     height of and space before and after the minus character.
   o Simplified the 'i' procedure in PostScript output.
   o Isolated, at beginning of PS output, constants that may be changed by
     the user of the file.  For instance, just before printing, one can
     change the orientation or reverse the order of the generations (mirror).
     These are constants that can be set within the LL code via interrogate()
     questions, but that require no other changes in the PostScript file.
   o Based min distance of names from generation boundaries on
     a fraction of generation width instead of a multiple of width of space
     character in fontsize used for names.
 8w6 (27), 24 Apr 2000
   o Made the multi-page question of how many pages the same for both portrait
     and landscape orientation -- based on layout of finished chart.  This
     made the LL code simpler, and the question easier to understand.
     Made landscape charts print to be read from the left side instead of right.
   o PS: Simplified the wlen and wshow procedures, in part by scaling the
     drawing space rather than the font size to make text fit in specified
     widths.  Results in less code in procedures that are called a lot.
     Thanks to Paul Buckley.
   o PS: Based the relative positioning of names and horizontal lines on
     the minus character.
   o Beginnings of a chart summary on LifeLines' screen:  number of individuals
     shown on the chart.
 8w5 (26), 17 Apr 2000
   o Added DSC comments to PostScript output to allow for easy separation
     of pages by document handlers.  Comments include PageOrientation for
     what should be automatic handling of orientation by viewing programs.
     (DSC = document structuring conventions)
     Thanks to Paul Buckley for suggesting this and providing an example.
   o Fixed multiple page chart feature which has been broken for quite a while.
     Oops!
   o Store line data and person data in an array to avoid overrunning
     the PostScript operand stack and to avoid the need to have the names
     appearing in the PS code for each page.
   o Enabled the truncation of ancestors of a duplicate person on the chart.
     (Not yet done for stepparents.)
   o Made vertical lines connecting duplicates in chart show in dashed style.
     (This needs to be changed to be based on duplication of family,
      not the parents.)
 8w3 (25), x Apr 2000
   o As part of an attempt at PostScript Level 1 compatibility:
     Added to PostScript code the emulation of some PSLevel2 operators.
     These emulations are used only if the PSLevel is less than 2, thereby
     making the output files more portable.
     Level 2 ISOLatin1 reencoding has been put on hold until it can be
     conditionally replaced by a Level 1 equivalent.
 8w2 (24), 10 Apr 2000
   o Fixed a fix to the PostScript: scaling of vertical name adjustment
     based on any reduction in base font size for names.  Oops.
   o Fixed so a person terminating a branch won't go too high up the page,
     which was allowing some mothers to squish the space for their children.
 8w (23), 8 Apr 2000
   o made the size of name_adjust depend on the size of the name font after
     it is scaled to make a person fit in a restrictive length.  This prevents
     names appearing in a reduced font size from being shifted too far down.
   o Made it so in ancestor chart, only the minimum space between the oldest
     and youngest siblings horizontals determines
     the mother's minimum position down the page.  This way, the youngest
     sibling's info can hang below the mother's horiz. line, saving space by
     not letting that info. force the mother farther down the page.
     Along with this is a clean-up of the placement of siblings and their
     vertical line.
   o Fixed loss of siblings' vertical line at edge of chart.  Oops.
 8v (22), 31 Mar 2000
   o Fixed bug in descendant chart when branching down and there was
     no spouse, father was positioned and line top determined without
     considering where child(ren) went.  Closed up unnecessary
     vertical space between branches and between first spouse and his/her
     children.  Thanks to Christopher Sawtell.
   o In ancestor procedure, rolled name_height into older_sibling_height
     and sibling_height since name_height is always added before the
     first sibling (when there are parents) to simplify code.
     [corner_height took over the use of name_height for extra space between
      a parent and first/last child]
   o In ancestor procedure, pre-adjusted for addition of a corner_height
     vertical line extension above first sibling's pos to prevent chart
     from going outside the clip rectangle.
 8u (21), 28 Mar 2000
   o implemented min and max functions to simplify code
 8t (20), 28 Mar 2000
   o added some vertical space between stepparent and his/her 1st child
   o added option to place label outside border
   o added option to print mothers first (at the tops of branches)
 8s (19), 25 Mar 2000
   o organized interrogate() questions by category and dependency.  See
     comments in interrogate function below.
   o made PacificPage cartridge margin adjustments in PostScript output optional
   o made printing of label, border, and title modular.  Label can be inside or
     outside the border.
   o placed calculation of font sizes and generation width in a PostScript
     procedure.
     They are calculated after the placement of label, border, and title which
     subtract from the space available for the chart.
   o Lined up the horizontal lines with the top of the 'o' character, for
     any font.
 8p (16)
   o tightened space for names and dates to their true font size of 1.0 and .6
     in vertical chart units.  Applied principle that fontsize is the distance
     between baselines of properly spaced lines of text.
   o eliminated copying of parameters to prevent change to actual arguments.
     LifeLines doesn't change contents of simple argument variables.
   o used PostScript 'for' loop to do pages in multi-page posters.
 8o (15)
   o vert. line positions were being adjusted and names were being
     counter-adjusted.  LifeLines code was adjusting vert lines and
     PostScript was undoing that adjustment.
   o more work on name positioning
 8n (14)
   o worked on name positioning and chart positioning in order to simplify code
     and make chart fit tightly in the space allotted to it.
 8m (13)
   o added options for label and border
   o simplified placement of title and label
 8k (11), 10 Mar 2000
   o Duplicates are now flagged when they're stored on the stack for printing.
     The feature to make horiz. lines dashed was already in the PostScript
     code, it was just not being used.
 8j (10), 9 Mar 2000
   o Fixed maternal half siblings' horiz. line being bolded in case where half
     sibling ancestors aren't done.  Oops.
   o Removing a redundant setting of anc variable revealed that it wasn't
     really being set when depth=max_depth.  This turns on a horiz. line to
     next gen from an individual.
   o Fixed a problem where maternal half siblings were starting right at
     mother's position, instead of below her name and info.
 8i (9)
   o Eliminated extra space being added when siblings' dad not on chart.  This
     was also causing half sib. line not to connect with sibling line
     in these cases.
 8h (8)
   o Applied Eric Festinger's fix to encode the bold font like the regular one.
   o Made half sib. ancestor printing subject to max_depth limit.  Oops.
 8g (7), 8 Mar 2000
   o All stepancestor lines use same color as former half sib. vertical line.
   o Turned off bold lines in stepparent ancestors.
   o Fixed a problem in PostScript where vertical line thickness wasn't being
     set if it was to be bold.  Result was that the first vertical line's
     thickness was the same as some line in the border.
   o Fixed a problem in PostScript where blue value of second line color
     was being changed (set to length of birth date string) with some
     PostScript interpreters.
   o Fixed a problem of not recording the height of the chart for
     later scaling to make it fit on the page.  Oops, maybe.
   o Fixed paternal half sib. positioning, no anc. case.  Oops.
 8f (6)
   o Moved calc of sibling_height back before doing father, which needs
     older_sib_height so that father can be placed that high above
     person, if there's room.  Oops.
   o Fixed a problem with vert. space on maternal half siblings w/o ancestors,
     which was messed up by other fixes.  Oops.
 8e (5)
   o Fixed the half sib. vertical line start which was broken due to my other
     fixes.  Oops.
   o Fixed the creeping down the page of the first fathers.  They weren't
     allowing themselves to be placed above person_minpos.
 8d (4)
   o Printing of half sibling ancestors is just about done -- need to do
     a little more testing, possible code clean-up, and investigation of 
     whether some vertical space additions are really necessary on half sibs.
     on mother's side.
   o Multi-page charts now print in left-to-right, top-to-bottom order so
     that when converted to PDF the whole chart can be viewed in continuous,
     side-by-side mode then adjacent pages are viewed adjacently.
   o changed the order of the procedure calls print_all_verticals() and
     print_all_persons() to make half sib. vertical lines print before
     horizontal lines so that when they overlap, the vertical lines are
     cut off cleanly.
   o added ISOLatinEncoding fix for handling accented characters -- need
     to make this an option.  Thanks to Frederic Lancon (Fre'de'ric Lanc,on).
     Note: this uses PostScript Level 2's built-in ISOLatin1 encoding vector.
   o Some variable name changes and small code reorganization in do_anc so that
     the tasks are more distinguishable
        init, half siblings via father, sibling height, father,
        last half siblings via father, mother, siblings,
        half siblings via mother, wrap-up